IO实战篇:数据排序处理 | 带你学《Java语言高级特性》之七十五

简介: 本节将带着读者开发实际案例,以简单基类为单位,结合Comparable接口、工厂设计模式实现对数据的排序功能。

上一篇:IO实战篇:字符串逆序显示 | 带你学《Java语言高级特性》之七十四
本节将带着读者开发实际案例,以简单基类为单位,结合Comparable接口、工厂设计模式实现对数据的排序功能。

【本节目标】
通过阅读本节内容,你将复习基类创建、Comparable接口的实现、Arrays类的使用等知识,结合新学的输入输出相关方法,编写相关接口与工厂类,初步完成对象类型数据的排序处理功能。

数据排序处理

从键盘输入以下的数据:“TOM:89 | JERRY:90 | TONY:95”,数据格式为“姓名:成绩 | 姓名:成绩 | 姓名:成绩”,对输入的内容按成绩进行排序,并将排序结果按照成绩由高到低排序。

对于排序的处理肯定使用Comparable接口完成,同时利用Arrays类来处理,这里面唯一不同的地方就在于此时的数据显示需要通过键盘输入。

1、 建立Student的程序类,并且进行排序规则的配置

public class Student implements Comparable<Student>{
    private String name;
    private double age;
    public Student(String name,double score) {
        this.name = name ; 
        this.score = score ;
    }
    public String toString() {
        return "姓名:" + this.name + "、成绩:" + this.score;
    }
    @Override
    public int comparaTo(Student obj) {
        if(this.score > obj.score) {
           return -1;
        }else if(this.score < obj.score) {
           return 1;
        }else{
           return 0;
        }
    }
}

2、 建立数据的输入处理操作,因为牵扯到拆分问题;

public interface IStudentService {
    public Student[] getData();  //获取排序数据
}

3、 建立IStudentService子类

public class StudentServiceImpl implements IStudentService {
    private String content ;
    private Student [] students;
    public StudentServiceImpl(String content) {
        this.content = content;
        this.handle();   //进行数据处理
    } 
    private void handle(){   //进行字符串数据的处理操作
        String result[] = this.content.split("\\|") ;  //拆分数据
        this.student = new Student[result.length];
        for (int x = 0 ;x < result.length ; x ++) {
            String temp [] = result[x].split(":");
            this.students[x] = new Student(temp[0],Double.parseDouble(temp[1])) ;
        }
    }
    @Override
    public Student[] getData() {
        Arrays.sort(this.students);
        return this.students;
    }
}

4、 定义Factory工厂类

public class Factory{
    private Factory(){}
    public static IStudentService getInstance(){
        return new StudentServiceImpl(InputUtil.getString("请输入数据信息:"));
    }
}

5、 编写测试类

public class IOCaseDemo {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(Factory.getInstance().getData()));
    }
}  

执行结果:

image.png

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:IO实战篇:数据排序处理深入 | 带你学《Java语言高级特性》之七十六
更多Java面向对象编程文章查看此处

相关文章
|
4月前
|
安全 Java 开发者
告别NullPointerException:Java Optional实战指南
告别NullPointerException:Java Optional实战指南
309 119
|
5月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
610 0
|
5月前
|
Java 开发者
Java并发编程:CountDownLatch实战解析
Java并发编程:CountDownLatch实战解析
516 100
|
6月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
4月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
358 18
|
4月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
195 4
|
4月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
233 1
|
5月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
1900 8
|
5月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
868 12
|
5月前
|
存储 Java Apache
Java语言操作INI配置文件策略
以上步骤展示了基本策略,在实际项目中可能需要根据具体需求进行调整优化。例如,在多线程环境中操作同一份配置时需要考虑线程安全问题;大型项目可能还需考虑性能问题等等。
260 15