首页 > 其他分享 >jdk8的Steam流工作常用方法总结

jdk8的Steam流工作常用方法总结

时间:2024-08-19 11:38:49浏览次数:11  
标签:总结 map Collectors collect list Person jdk8 new Steam

Steam流工作常用方法总结

收集list 以某几个字段为键以内容为list的map

Map<String, List<TVoucherDetail>> tVoucherDetailMap = list.stream().collect(Collectors.groupingBy(
                obj -> obj.getDocumentNumber() + "-" + obj.getCertificationData()
        ));

收集list 以某两个字段分组,并以进行统计

Map<String, Map<String, BigDecimal>> map = s1.collect(
                Collectors.groupingBy(
                        CurrentTransactionsCount::getCurrentUnitName,
                        Collectors.groupingBy(
                                CurrentTransactionsCount::getAssistCeanDept)
                        )
                ));

收集list 以某两个字段分组,并以进行统计数量

Map<String, Map<Integer, Long>> map = pfaDeptProblemPos.stream().collect(
                Collectors.groupingBy(
                        PfaDeptProblemPo::getThreeUnitName,
                        Collectors.groupingBy(PfaDeptProblemPo::getProblemType, Collectors.counting())));

收集list 以某两个字段分组,并以进行统计合计(需要判空处理)

Map<String, Map<String, BigDecimal>> map = s1.collect(
                Collectors.groupingBy(
                        CurrentTransactionsCount::getCurrentUnitName,
                        Collectors.groupingBy(
                                CurrentTransactionsCount::getAssistCeanDept,
                                Collectors.reducing(
                                        BigDecimal.ZERO,
                                        e -> e.getBalance() != null ? e.getBalance() : BigDecimal.ZERO,
                                        BigDecimal::add)
                        )
                ));

收集list中某个BigDecimal属性并统计

 BigDecimal sum = list.stream().filter(e -> e.getDebitAmount() != null).map(TVoucherDetail::getDebitAmount).reduce(BigDecimal.ZERO,BigDecimal::add);

收集list中某些属性映射到新的集合中

 // 使用map操作将Person对象映射到PersonDTO对象,并收集到新的List<PersonDTO>中  
        List<PersonDTO> personDTOs = people.stream()  
                .map(person -> new PersonDTO(person.getId(), person.getName())) // 创建新的PersonDTO对象  
                .collect(Collectors.toList()); // 收集到List中  

收集list集合以某个属性为键,以本身为值为map

Map<String, UserInfo> phoneNumberMap = list.stream()  
    .collect(Collectors.toMap(  
        UserInfo::getPhoneNumber(), // Key Mapper: 从每个UserInfo对象中提取电话号码作为Map的键  
        Function.identity(),         // Value Mapper: 使用UserInfo对象本身作为Map的值  
        (v1, v2) -> v1               // Merge Function: 如果存在键冲突(即两个UserInfo对象有相同的电话号码),则保留第一个对象(v1),丢弃第二个对象(v2)  
    ));

收集list集合中的对象,映射到另个一对象集合中

    List<Person> people = Arrays.asList(  
                new Person("1", "Alice", 30, "123 Street"),  
                new Person("2", "Bob", 25, "456 Avenue")  
        );
// 使用map操作将Person对象映射到PersonDTO对象,并收集到新的List<PersonDTO>中  
        List<PersonDTO> personDTO = people.stream()  
                .map(person -> new PersonDTO(person.getId(), person.getName())) // 创建新的PersonDTO对象  
                .collect(Collectors.toList()); // 收集到List中

根据list对象集合中某个属性去重

 List<Person> persons = Arrays.asList(
                new Person("Alice", 25),
                new Person("Bob", 30),
                new Person("Alice", 28), // 重复的name
                new Person("Charlie", 35)
        );

        Collection<Person> values = persons.stream().collect(Collectors.toMap(
                Person::getName,
                Function.identity(),
                (old, n) -> old
        )).values();

        values.forEach(System.out::println);

标签:总结,map,Collectors,collect,list,Person,jdk8,new,Steam
From: https://www.cnblogs.com/pyb999/p/18367006

相关文章

  • JS逆向总结
    总结在进行JS逆向中常用的手段1)Object.defineProperty:对于对象属性的监控 该方法是es5的方法(千万不要以为是es6的哦),作用是直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。(切记只能用在对象身上不能用在数组身上)1、语法 代码解读Obj......
  • 总结指针数组与数组指针的区别
    1、指针数组1-1、定义指针数组是一个数组,其元素是指针。这意味着数组的每个位置都存储了一个指针,这些指针可以指向任何类型的数据(包括其他数组、结构体等)。1-2、类型如果有一个指向整数的指针数组,其类型可能是 int*arr[N];,这里 arr 是一个数组,包含 N 个 int* 类型......
  • C++ 各种初始化方法总结
    在各种编程语言中,初始化都是非常重要的步骤,用于确保对象在使用前具有确定的初始状态。C++提供了多种初始化方法,每种方法都有其特定的使用场景和注意事项。以下是一些主要的初始化方法及其注意事项:默认初始化(Default-initialization):形如Tobj、newT等方式的初始化,其中T为类......
  • java打印流,commons-io工具包,IO总结
    一.打印流1.概述:平时我们在控制台打印输出,是调用print()方法和println()方法完成的,这两个方法都来自于java.io.PrintStream类作用:该类能够方便地打印各种数据类型的值,写入数据后可以实现自动换行。通常用于日志记录2打印流的构造方法publicPrintStream(StringfileName)......
  • 动态规划 总结
    DAG上的动态规划与树形DP这两个词看上去很高大上,但实则就是记忆化搜索,而记忆化搜索其实就是DP的本质。当选择一个需要用全局变量来参与描述状态的方式时,就只能用常规搜索。但当状态可以完全被几个非全局参数确定性的描述时,就可以用记忆化搜索,记忆化搜索可以通过存储答案并直接提取......
  • Hadoop 第六周总结
    在Hadoop学习的第六周,你可能会收获以下关键知识点:YARN(YetAnotherResourceNegotiator):YARN是Hadoop的资源管理和作业调度系统。本周你可能深入了解了YARN的架构及其组件,包括ResourceManager和NodeManager。ResourceManager负责全局资源调度和作业调度,而NodeManag......
  • 2024.8.18 周总结(上周天到这周六集训,这周天放假)
    感觉这一周上难度了,尤其没听懂的是二分图和博弈论那天上午休息完之后的部分。有复习,有新知识,收获还是比较大的。晚上打游戏打多了。文化课没学多少。中午看番、玩寝室楼下桌上的游戏去了,因为寝室要关灯拉窗帘睡得也更早,一周就只写了一点点字帖,看了一点点《乡土中国》。综......
  • 虚树总结
    之前学了一些算法,没有写算法总结,未来会陆续补一些。前置知识:树形\(dp\),\(lca\),\(dfs\)序。我们考虑\([HEOI2014]\)大工程这道题。显而易见,假如这道题只有一次询问,我们可以直接树形\(dp\),快速求出答案,时间复杂度\(O(n)\)。但是,梦想是梦想,现实是现实,这题多组询问,假如一......
  • 第七周总结
    深入并发编程鉴于并发编程在现代软件开发中的重要性,本周我投入了大量时间深入学习了Java的并发编程模型。除了复习之前学过的线程基础、同步机制(如synchronized、volatile、wait/notify)外,我还重点学习了Java并发包(java.util.concurrent)中的高级并发工具,如ExecutorService、Futu......
  • 2024.8.11至2024.8.17周总结
    本周学习任务清单1.字符串:Hash、KMP、trie树、拓展KMP(Z函数)、AC自动机、Manacher、回文自动机、后缀数组、后缀自动机、广义后缀自动机2.数论:欧拉函数、莫比乌斯函数、欧拉反演、莫比乌斯反演、筛法、杜教筛、min25筛3.博弈论:公平组合游戏、反常游戏、SG函数总结本周学习的......