Java 1.8新特性使用记录:Filter、数据容器的转换、排序Sorted

简介: Java 1.8新特性使用记录有些方法一段时间不使用会忘记,这里要记录一下,方便以后使用一、过滤Filter二、数据容器的转换三、List 排序

一、过滤Filter
注意:符合条件的才返回。List的对象如果为null会报空指针,安全起见要加上判断

public class MyCar {
   
    private Integer id;
    private String name;
    private String number;
    private Integer age;
}

public static void myFilter() {
   
        List<MyCar> carList = new ArrayList<>();
        carList.add(new MyCar("c1",1));
        carList.add(new MyCar("c2",2));
        carList.add(new MyCar("c3",3));
        carList.add(new MyCar("c4",4));
        carList.add(new MyCar("c5",5));
        carList.add(null);
        //符合条件的才会返回
        carList = carList.stream().filter(e->e != null && e.getAge() >2).collect(Collectors.toList());

        carList.forEach(e->System.out.println(e));

    }

    public static void main(String[] args) {
   
        FilterDemo.myFilter();
    }

二、数据容器的转换
2.1、将对象数组一个属性抽出来变成List


//List的生成看上面
List<String> nameList = carList.stream().map(e->e.getName()).collect(Collectors.toList());
        nameList.forEach(e->System.out.println(e));

2.2、将对象List指定属性内容以逗号隔开,例如:name


//生产环境注意判断空
String nameStr = carList.stream().map(e->e.getName()).collect(Collectors.joining(","));
System.out.println(nameStr);
//c3,c4,c5

//上面也可以分成两步操作
nameList = carList.stream().map(e->e.getName()).collect(Collectors.toList());
nameStr = nameList.stream().collect(Collectors.joining(","));
System.out.println(nameStr);
//c3,c4,c5

三、List 排序

3.1.List排序,Integer,BigDecimal,Date可以一样使用
注意:判空是很重要的一步。null一般放在后面。下面都有介绍

public static void mySortedInteger() {
   
        //这里其中有一个为空的
        List<Integer> numList = Arrays.asList( 1,2,3,4,5,6,7,8,8,9,null,10);
        System.out.println(numList.stream().map(e->e+"").collect(Collectors.joining(",")));
        //默认升序,判空,null放在后面
        numList = numList.stream().sorted(Comparator.nullsLast(Integer::compareTo)).collect(Collectors.toList());
        //numList = numList.stream().sorted(Comparator.comparing(e->e,Comparator.nullsLast(Integer::compareTo))).collect(Collectors.toList());
        System.out.println(numList.stream().map(e->e+"").collect(Collectors.joining(",")));
        //默认升序,判空,null放在前面
        numList = numList.stream().sorted(Comparator.nullsFirst(Integer::compareTo)).collect(Collectors.toList());
        //numList = numList.stream().sorted(Comparator.comparing(e->e,Comparator.nullsFirst(Integer::compareTo))).collect(Collectors.toList());
        System.out.println(numList.stream().map(e->e+"").collect(Collectors.joining(",")));
        //降序,判空,null放在后面
        numList = numList.stream().sorted(Comparator.nullsLast(Comparator.reverseOrder())).collect(Collectors.toList());
        //numList = numList.stream().sorted(Comparator.comparing(e->e,Comparator.nullsLast(Comparator.reverseOrder()))).collect(Collectors.toList());
        System.out.println(numList.stream().map(e->e+"").collect(Collectors.joining(",")));
        //降序,判空,null放在前面
        numList = numList.stream().sorted(Comparator.nullsLast(Integer::compareTo).reversed()).collect(Collectors.toList());
        System.out.println(numList.stream().map(e->e+"").collect(Collectors.joining(",")));
        //当然可以加filter,但是这样长度就会减少
        //numList = numList.stream().filter(e->e != null).sorted(Comparator.comparing(e->e,Comparator.reverseOrder())).collect(Collectors.toList());
        numList = numList.stream().filter(e->e != null).sorted(Comparator.reverseOrder()).collect(Collectors.toList());
        System.out.println(numList.stream().map(e->e+"").collect(Collectors.joining(",")));
    }

3.2、对象数组
对象是使用率最高的,也需要注意判空!
跟上面的用法基本一致。

public static void mySortedTest() {
   
        List<MyCar> carList = new ArrayList<>();
        //初始化对象
        Calendar cal = Calendar.getInstance();
        carList.add(new MyCar("c1",1,cal.getTime(),new BigDecimal(1)));
        cal.add(Calendar.DAY_OF_MONTH, -1);
        carList.add(new MyCar("c2",2,cal.getTime(),new BigDecimal(2)));
        carList.add(new MyCar("c3",3,null,new BigDecimal(3)));
        cal.add(Calendar.DAY_OF_MONTH, 5);
        carList.add(new MyCar("c4",4,cal.getTime(),new BigDecimal(4)));
        cal.add(Calendar.DAY_OF_MONTH, 2);
        carList.add(new MyCar("c5",5,cal.getTime(),new BigDecimal(5)));
        carList.add(new MyCar("c6",null,cal.getTime(),new BigDecimal(5)));
        carList.add(new MyCar("c7",null,cal.getTime(),new BigDecimal(5)));
        System.out.println("原始顺序 :");
        //这里 Integer,BigDecimal,Date的排序使用大同小异,以Inter为例
        carList.forEach(e->System.out.println(e));
        System.out.println("Sorted by Age 升序,null放后面 :");
        carList = carList.stream().sorted(Comparator.comparing(MyCar::getAge,Comparator.nullsLast(Integer::compareTo))).collect(Collectors.toList());
        carList.forEach(e->System.out.println(e));
        System.out.println("Sorted by Age 升序,null放前面 :");
        carList = carList.stream().sorted(Comparator.comparing(MyCar::getAge,Comparator.nullsFirst(Integer::compareTo))).collect(Collectors.toList());
        carList.forEach(e->System.out.println(e));
        System.out.println("Sorted by Age 降序,null放在后面:");
        carList = carList.stream().sorted(Comparator.comparing(MyCar::getAge,Comparator.nullsFirst(Integer::compareTo)).reversed()).collect(Collectors.toList());
        carList.forEach(e->System.out.println(e));
        System.out.println("Sorted by Age 降序,null放在前面:");
        carList = carList.stream().sorted(Comparator.comparing(MyCar::getAge,Comparator.nullsLast(Integer::compareTo)).reversed()).collect(Collectors.toList());
        carList.forEach(e->System.out.println(e));
        //其它与Integer基本一样
        System.out.println("Sorted by Date 升序,null放在后面:");
        carList = carList.stream().sorted(Comparator.comparing(MyCar::getCreateDate,Comparator.nullsLast(Date::compareTo))).collect(Collectors.toList());
        carList.forEach(e->System.out.println(e));
    }
相关文章
|
8月前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
226 1
|
9月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
Java API 开发者
334 0
|
11月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
492 1
|
11月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
990 1
|
11月前
|
缓存 安全 Java
Java 并发新特性实战教程之核心特性详解与项目实战
本教程深入解析Java 8至Java 19并发编程新特性,涵盖CompletableFuture异步编程、StampedLock读写锁、Flow API响应式流、VarHandle内存访问及结构化并发等核心技术。结合电商订单处理、缓存系统、实时数据流、高性能计数器与用户资料聚合等实战案例,帮助开发者高效构建高并发、低延迟、易维护的Java应用。适合中高级Java开发者提升并发编程能力。
561 0
|
11月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
477 1
|
11月前
|
IDE Java API
Java 17 新特性与微服务开发的实操指南
本内容涵盖Java 11至Java 17最新特性实战,包括var关键字、字符串增强、模块化系统、Stream API、异步编程、密封类等,并提供图书管理系统实战项目,帮助开发者掌握现代Java开发技巧与工具。
686 0
|
11月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
322 2
|
11月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
470 14