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));
    }
相关文章
|
1月前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
本文介绍了Twaver HTML5中数据的批量加载方法,通过使用`box.startBatch()`可以在大量数据加载时提高性能。文章通过示例代码展示了如何在React组件中使用批量加载功能,以减少界面重绘次数并提升效率。
47 1
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
|
1月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
39 1
|
2月前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
1月前
|
XML 移动开发 JSON
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
本文介绍了Twaver HTML5中的数据容器(DataBox),包括如何进行增删查改操作、遍历数据容器以及判断网元是否存在于数据容器中。DataBox用于管理所有的网元对象,如ElementBox、LayerBox、AlarmBox等,并通过示例代码展示了其常用方法的使用。
42 1
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
|
27天前
|
存储 索引 Python
python中的数据容器
python中的数据容器
|
2月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
2月前
|
存储 Docker 容器
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
|
2月前
|
监控 安全 网络安全
|
2月前
|
安全 Java API
Java 8 流库的魔法革命:Filter、Map、FlatMap 和 Optional 如何颠覆编程世界!
【8月更文挑战第29天】Java 8 的 Stream API 通过 Filter、Map、FlatMap 和 Optional 等操作,提供了高效、简洁的数据集合处理方式。Filter 用于筛选符合条件的元素;Map 对元素进行转换;FlatMap 将多个流扁平化合并;Optional 安全处理空值。这些操作结合使用,能够显著提升代码的可读性和简洁性,使数据处理更为高效和便捷。
55 0
|
2月前
|
域名解析 Kubernetes 负载均衡
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?