• Java8 Stream使用整理


    目录

    list => map

    map => map 数据处理

    java.util.stream.Stream#flatMap


    java.util.stream.Stream

    list => map

    Collectors.toMap,Collectors.groupingBy

    1. public class TestData {
    2. private int id;
    3. private String name;
    4. private String sex;
    5. private String subject;
    6. private String score;
    7. }
    8. public class TestDataKey {
    9. private String name;
    10. private String sex;
    11. }

    1、获取每个人所学的科目列表:List => Map>

    1. Map> idAndSujectListMap= list.stream().collect(Collectors.groupingBy(TestData::getId,
    2. Collectors.mapping(TestData::getSubject, Collectors.toList())));
    3. //去重
    4. Map> idAndSujectListMap= list.stream().collect(Collectors.groupingBy(TestData::getId,
    5. Collectors.mapping(TestData::getSubject, Collectors.toSet())));

    2、获取每个人的总成绩:List => Map

    1. Map idAndScoreSumMap= list.stream().collect(Collectors.groupingBy(TestData::getId,
    2. Collectors.summingInt(TestData::getScore));

    3、获取name+sex(唯一键)对应的所有信息:List => Map>

    1. Map> keyAndListMap = list.stream().collect(Collectors.groupingBy(item ->
    2. TestDataKey.builder().name(item.getName()).sex(item.getSex()).build()));

    4、获取name+sex(唯一键)对应总成绩:List => Map

    1. Map keyAndScoreSumMap = list.stream().collect(Collectors.groupingBy(item ->
    2. TestDataKey.builder().name(item.getName()).sex(item.getSex()).build(),
    3. Collectors.summingInt(TestData::getScore)));

    5、获取name+sex(唯一键)对应的ID:List => Map

    1. Map keyAndIdMap = list.stream().collect(Collectors.toMap(item ->
    2. TestDataKey.builder().name(item.getName()).sex(item.getSex()).build(),
    3. TestData::getId, (v1, v2) -> v1));

    map => map 数据处理

    Map 转 Map>

    将map的value(逗号隔开的字符串)转为List

    1. Map> resultMap = map.entrySet()
    2. .stream().collect(Collectors.toMap(Map.Entry::getKey,
    3. entry -> Arrays.asList(entry.getValue().split(","))));

    java.util.stream.Stream#flatMap

    使用场景:map不适用时,有多个元素时,考虑使用

    1、获取所有学科:Map> idAndSubjectMap => List allSubject

    1. //已有:Map> idAndSubjectMap
    2. //之前
    3. List subjects = Lists.newArrayList();
    4. idAndSubjectMap.values().forEach(subjects::addAll);
    5. //替换
    6. List subjects = idAndSubjectMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList())

    2、获取所有学科:Map idAndSubjectMap => List allSubject

    假设map的value学科是以逗号隔开的字符串

    1. //已有:Map idAndSubjectMap
    2. //之前
    3. List subjects = Lists.newArrayList();
    4. idAndSubjectMap.values().forEach(item -> subjects.addAll(Arrays.asList(item.split(","))));
    5. //替换
    6. List subjects = idAndSubjectMap.values().stream()
    7. .flatMap(value-> Arrays.stream(value.split(","))).collect(Collectors.toList());

  • 相关阅读:
    史上超全UI/UX设计素材网站大合集!足足26个!
    SpringSecurity - 自定义用户认证
    Mysql中EXPLAIN解读
    【计算广告学习笔记】1. 广告的计价方式和常用缩写
    计算机等级考试:信息安全技术 知识点十二
    LeetCode第14题:最长公共前缀
    Unix后记&寻找Shen Lin
    基于 SPI 的增强式插件框架设计
    论如何提升学习的能力
    Linux开发工具(4)——Makefile
  • 原文地址:https://blog.csdn.net/tec_1535/article/details/126055035