欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java8如何根據(jù)list對(duì)象中的屬性過(guò)濾篩選

 更新時(shí)間:2022年05月06日 10:50:50   作者:瘋狂の小猿人  
這篇文章主要介紹了java8如何根據(jù)list對(duì)象中的屬性過(guò)濾篩選,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

根據(jù)list對(duì)象中的屬性過(guò)濾篩選

代碼演示:

根據(jù)性別篩選出所有的女同學(xué)

@Data
        class Student{
            public Integer age;
            public String name;
            public String sex;
        }
        List<Student> students = new ArrayList<>();
        Student student1 = new Student();
        student1.setAge(18);
        student1.setName("趙");
        student1.setSex("男");
        Student student2 = new Student();
        student2.setAge(19);
        student2.setName("錢(qián)");
        student2.setSex("女");
        Student student3 = new Student();
        student3.setAge(20);
        student3.setName("孫");
        student3.setSex("女");
        Collections.addAll(students,student1,student2,student3);
        //根據(jù)條件過(guò)濾 出所有的女同學(xué)
        List<Student> result = students.stream().filter(student -> student.getSex().equals("女")).collect(Collectors.toList());
        System.out.println(result);

執(zhí)行結(jié)果:

filter方法:

對(duì)流的過(guò)濾,將一個(gè)流轉(zhuǎn)換成另一個(gè)子集流

list根據(jù)對(duì)象某個(gè)字段或多個(gè)字段去重、篩選、List轉(zhuǎn)Map、排序、分組、統(tǒng)計(jì)計(jì)數(shù)等

我們利用 java8 的新特性,可以方便簡(jiǎn)潔高效的處理一些集合的數(shù)據(jù)。

簡(jiǎn)單示例如下

先定義一個(gè)訂單對(duì)象(Order)

public class Order {?
? ? private Long id;
? ? private Long userId;
? ? private String num;
? ? private String type;
? ? private Float allAmt;
? ? private Float payAmt;
? ? private Integer orderNum;
?
? ? public Order(Long id, Long userId, String num, String type, Float allAmt, Float payAmt, Integer orderNum) {
? ? ? ? this.id = id;
? ? ? ? this.userId = userId;
? ? ? ? this.num = num;
? ? ? ? this.type = type;
? ? ? ? this.allAmt = allAmt;
? ? ? ? this.payAmt = payAmt;
? ? ? ? this.orderNum = orderNum;
? ? }
? ? // getting... ?setting...
}

過(guò)濾篩選

List<Order> orders = Lists.newArrayList();
??
// 篩選總金額大于1000的訂單
orders = orders.stream().filter(item -> item.getAllAmt() > 1000.00f).collect(Collectors.toList());

分組

List<Order> orders = Lists.newArrayList();
??
// 按照訂單類(lèi)型分組
Map<String, List<Order>> orderGroupMap = orders.stream().collect(Collectors.groupingBy(Order::getType));

去重

List<Order> orders = Lists.newArrayList();
??
// 按照訂單編號(hào)去重
orders = orders.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
? ? ? ? ? -> new TreeSet<>(Comparator.comparing(Order::getNum))), ArrayList::new));
?
// 按照訂單編號(hào)和類(lèi)型去重
orders = orders.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
? ? ? ? ? -> new TreeSet<>(Comparator.comparing(o -> o.getNum() + ";" + o.getType()))), ArrayList::new));

List 轉(zhuǎn) Map

List<Order> orders = Lists.newArrayList();
??
// 將訂單集合轉(zhuǎn)換成訂單編號(hào)-應(yīng)付金額 map,注意訂單編號(hào)作為 key 不能重復(fù),應(yīng)先做去重處理
Map<String, Float> numPayMap = orders.stream().collect(Collectors.toMap(Order::getNum, Order::getPayAmt));
?
// 用 id 做 key 將 List 轉(zhuǎn)成 Map
Map<Long, Order> orderMap = orders.stream().collect(Collectors.toMap(Order::getId, item -> item));

排序

List<Order> orders = Lists.newArrayList();
??
? // 按照訂單總金額從高到低排序
? // 方式一
? orders.sort((o1, o2)
? ? ? ? ? -> o1.getAllAmt() == null ? 1 : (o2.getAllAmt() == null ? -1 : o2.getAllAmt().compareTo(o1.getAllAmt())));
?
? // 方式二
? orders.sort(Comparator.comparing(Order::getAllAmt, (o1, o2)
? ? ? ? ? -> o1 == null ? 1 : (o2 == null ? -1 : o2.compareTo(o1))));
?
? // 方式三 (allAmt 字段不能為 null, null 會(huì)導(dǎo)致排序失敗)
? orders.sort(Comparator.comparing(Order::getAllAmt).reversed());
?
? // 先按照訂單類(lèi)型排序,再按照訂單應(yīng)付金額從高到低排序
? orders.sort(Comparator.comparing(Order::getType, (o1, o2)
? ? ? ? ? -> o1 == null ? 1 : (o2 == null ? -1 : o1.compareTo(o2))).thenComparing((o1, o2)
? ? ? ? ? -> o1.getPayAmt() == null ? 1 : (o2.getPayAmt() == null ? -1 : o2.getPayAmt().compareTo(o1.getPayAmt()))));

統(tǒng)計(jì)計(jì)數(shù)

List<Order> orders = Lists.newArrayList();
??
? // 統(tǒng)計(jì)所有訂單的總金額
? // 求和
? Double sum = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).sum();
?
? // 最大總金額
? OptionalDouble max = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).max();
? // 防止沒(méi)有訂單數(shù)據(jù)的處理
? Double maxAllAmt = max.isPresent() ? max.getAsDouble() : 0;
??
? // 最小總金額
? OptionalDouble min = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).min();
?
? // 平均總金額
? OptionalDouble average = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).average();

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • RabbitMQ實(shí)現(xiàn)延時(shí)消息的兩種方法實(shí)戰(zhàn)教程

    RabbitMQ實(shí)現(xiàn)延時(shí)消息的兩種方法實(shí)戰(zhàn)教程

    這篇文章主要介紹了RabbitMQ實(shí)現(xiàn)延時(shí)消息的兩種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • springboot整合企微webhook機(jī)器人發(fā)送消息提醒

    springboot整合企微webhook機(jī)器人發(fā)送消息提醒

    這篇文章主要為大家介紹了springboot整合企微webhook機(jī)器人發(fā)送消息提醒,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • java中functional interface的分類(lèi)和使用詳解

    java中functional interface的分類(lèi)和使用詳解

    這篇文章主要介紹了java中functional interface的分類(lèi)和使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java線程之ThreadLocal解析

    Java線程之ThreadLocal解析

    這篇文章主要介紹了Java線程之ThreadLocal解析,ThreadLocal 提供線程的局部變量,每個(gè)線程都可以通過(guò)get()和set()對(duì)局部變量進(jìn)行操作而不會(huì)對(duì)其他線程的局部變量產(chǎn)生影響,實(shí)現(xiàn)了線程之間的數(shù)據(jù)隔離,需要的朋友可以參考下
    2023-09-09
  • Java遞歸算法遍歷部門(mén)代碼示例

    Java遞歸算法遍歷部門(mén)代碼示例

    這篇文章主要介紹了Java遞歸算法遍歷部門(mén)代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • SpringBoot利用Redis解決海量重復(fù)提交問(wèn)題

    SpringBoot利用Redis解決海量重復(fù)提交問(wèn)題

    本文主要介紹了SpringBoot利用Redis解決海量重復(fù)提交問(wèn)題,介紹了三種常見(jiàn)的解決方案,包括使用Redis計(jì)數(shù)器,使用Redis分布式鎖和使用Redis發(fā)布/訂閱機(jī)制,感興趣的可以了解一下
    2024-03-03
  • spring boot攔截器實(shí)現(xiàn)IP黑名單實(shí)例代碼

    spring boot攔截器實(shí)現(xiàn)IP黑名單實(shí)例代碼

    本篇文章主要介紹了spring boot攔截器實(shí)現(xiàn)IP黑名單實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java正則表達(dá)式基礎(chǔ)語(yǔ)法詳解

    Java正則表達(dá)式基礎(chǔ)語(yǔ)法詳解

    這篇文章主要介紹了Java正則表達(dá)式語(yǔ)法,包括常用正則表達(dá)式、匹配驗(yàn)證-驗(yàn)證Email是否正確以及字符串中查詢(xún)字符或者字符串,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 聊聊Spring Cloud Cli 初體驗(yàn)

    聊聊Spring Cloud Cli 初體驗(yàn)

    這篇文章主要介紹了聊聊Spring Cloud Cli 初體驗(yàn),SpringBoot CLI 是spring Boot項(xiàng)目的腳手架工具。非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-04-04
  • java實(shí)現(xiàn)http的Post、Get、代理訪問(wèn)請(qǐng)求

    java實(shí)現(xiàn)http的Post、Get、代理訪問(wèn)請(qǐng)求

    這篇文章主要為大家提供了java實(shí)現(xiàn)http的Post、Get、代理訪問(wèn)請(qǐng)求的相關(guān)代碼,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評(píng)論