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

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

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

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

代碼演示:

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

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

filter方法:

對流的過濾,將一個流轉(zhuǎn)換成另一個子集流

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

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

簡單示例如下

先定義一個訂單對象(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 轉(zhuǎn) Map

List<Order> orders = Lists.newArrayList();
??
// 將訂單集合轉(zhuǎn)換成訂單編號-應(yīng)付金額 map,注意訂單編號作為 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 會導(dǎo)致排序失敗)
? orders.sort(Comparator.comparing(Order::getAllAmt).reversed());
?
? // 先按照訂單類型排序,再按照訂單應(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)計計數(shù)

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

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

相關(guān)文章

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

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

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

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

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

    mybatis如何使用注解實現(xiàn)一對多關(guān)聯(lián)查詢

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

    Springboot整合支付寶支付功能

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

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

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

    SpringBoot+MyBatis-Plus實現(xiàn)數(shù)據(jù)庫讀寫分離的代碼示例

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

    Java有序的Map LinkedHashMap用法詳解

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

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

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

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

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

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

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

最新評論

漳州市| 钦州市| 霞浦县| 宜兰县| 博乐市| 永修县| 宽甸| 龙游县| 广东省| 凤翔县| 漳浦县| 修水县| 屏南县| 吉安县| 武隆县| 丹寨县| 景德镇市| 自贡市| 灵山县| 资兴市| 惠州市| 东阿县| 密山市| 运城市| 贡山| 科尔| 湟源县| 始兴县| 安庆市| 游戏| 晋宁县| 新安县| 大同县| 潼南县| 光泽县| 丰宁| 平顶山市| 普陀区| 开阳县| 扬州市| 建宁县|