最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java8如何根據list對象中的屬性過濾篩選

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

根據list對象中的屬性過濾篩選

代碼演示:

根據性別篩選出所有的女同學

@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("錢");
        student2.setSex("女");
        Student student3 = new Student();
        student3.setAge(20);
        student3.setName("孫");
        student3.setSex("女");
        Collections.addAll(students,student1,student2,student3);
        //根據條件過濾 出所有的女同學
        List<Student> result = students.stream().filter(student -> student.getSex().equals("女")).collect(Collectors.toList());
        System.out.println(result);

執(zhí)行結果:

filter方法:

對流的過濾,將一個流轉換成另一個子集流

list根據對象某個字段或多個字段去重、篩選、List轉Map、排序、分組、統計計數等

我們利用 java8 的新特性,可以方便簡潔高效的處理一些集合的數據。

簡單示例如下

先定義一個訂單對象(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...
}

過濾篩選

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

分組

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

去重

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

List 轉 Map

List<Order> orders = Lists.newArrayList();
??
// 將訂單集合轉換成訂單編號-應付金額 map,注意訂單編號作為 key 不能重復,應先做去重處理
Map<String, Float> numPayMap = orders.stream().collect(Collectors.toMap(Order::getNum, Order::getPayAmt));
?
// 用 id 做 key 將 List 轉成 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 會導致排序失敗)
? orders.sort(Comparator.comparing(Order::getAllAmt).reversed());
?
? // 先按照訂單類型排序,再按照訂單應付金額從高到低排序
? 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()))));

統計計數

List<Order> orders = Lists.newArrayList();
??
? // 統計所有訂單的總金額
? // 求和
? 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();
? // 防止沒有訂單數據的處理
? 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();

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • JavaMail入門教程之發(fā)送郵件(3)

    JavaMail入門教程之發(fā)送郵件(3)

    這篇文章主要為大家詳細介紹了JavaMail入門教程之發(fā)送郵件的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • SpringBoot整合jasypt加密配置文件敏感信息

    SpringBoot整合jasypt加密配置文件敏感信息

    在項目中我們需要對配置文件的一些敏感信息進行加密處理,比如數據庫賬戶密碼,避免直接暴露出來,這種場景常常用于生產環(huán)境,我們不想讓開發(fā)人員知道生產庫的密碼,有運維人員統一管理,所以本文給大家介紹了SpringBoot整合jasypt加密配置文件敏感信息
    2024-06-06
  • mybatis如何使用注解實現一對多關聯查詢

    mybatis如何使用注解實現一對多關聯查詢

    這篇文章主要介紹了mybatis如何使用注解實現一對多關聯查詢的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Springboot整合支付寶支付功能

    Springboot整合支付寶支付功能

    這篇文章主要介紹了Springboot整合支付寶支付功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • IntelliJ?IDEA社區(qū)版2021.3配置SpringBoot項目詳細教程及失敗案例

    IntelliJ?IDEA社區(qū)版2021.3配置SpringBoot項目詳細教程及失敗案例

    IntelliJ?IDEA?2021.3.3是一款集成開發(fā)環(huán)境,用于Java和其他編程語言的開發(fā),下面這篇文章主要給大家介紹了關于IntelliJ?IDEA社區(qū)版2021.3配置SpringBoot項目詳細教程及失敗案例的相關資料,需要的朋友可以參考下
    2024-03-03
  • SpringBoot+MyBatis-Plus實現數據庫讀寫分離的代碼示例

    SpringBoot+MyBatis-Plus實現數據庫讀寫分離的代碼示例

    在當今互聯網應用中,數據庫讀寫分離是提高系統性能和穩(wěn)定性的重要手段之一,通過將讀操作和寫操作分別路由到不同的數據庫節(jié)點,可以有效減輕數據庫服務器的負擔,本文將介紹如何利用SpringBoot和MyBatis-Plus框架實現數據庫讀寫分離,需要的朋友可以參考下
    2023-11-11
  • Java有序的Map LinkedHashMap用法詳解

    Java有序的Map LinkedHashMap用法詳解

    LinkedHashMap是Java提供的一個集合類,它繼承自HashMap,并在HashMap基礎上維護一條雙向鏈表,本文給大家介紹java 有序的Map LinkedHashMap簡介,感興趣的朋友一起看看吧
    2024-01-01
  • 從SpringBoot打war包并配置外部Tomcat運行的全流程

    從SpringBoot打war包并配置外部Tomcat運行的全流程

    由于其他原因,我們需要使用SpringBoot打成war包放在外部的Tomcat中運行,本文就以一個案例來說明從SpringBoot打war包到Tomcat配置并運行的全流程經過,需要的朋友可以參考下
    2024-06-06
  • 如何把VS Code打造成Java開發(fā)IDE

    如何把VS Code打造成Java開發(fā)IDE

    這篇文章主要介紹了如何把VS Code打造成Java開發(fā)IDE,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 詳解Mybatis攔截器安全加解密MySQL數據實戰(zhàn)

    詳解Mybatis攔截器安全加解密MySQL數據實戰(zhàn)

    本文主要介紹了Mybatis攔截器安全加解密MySQL數據實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

衡南县| 资溪县| 宁化县| 博白县| 剑河县| 浠水县| 曲阳县| 丰宁| 陈巴尔虎旗| 康乐县| 黔江区| 灵宝市| 温泉县| 绵阳市| 西和县| 朝阳市| 乌什县| 栾城县| 武清区| 和田市| 富民县| 北京市| 吉木萨尔县| 慈溪市| 会同县| 康定县| 漯河市| 平湖市| 芜湖市| 喀喇| 蕲春县| 普兰店市| 玉环县| 松潘县| 元氏县| 孝昌县| 寿宁县| 南部县| 岳普湖县| 闽侯县| 肇州县|