• Java 8 Stream 的使用场景


    Java 8 Stream 的使用场景
    只符合所筛选条件至多一条

    CommonArea l = common.stream().filter(item ->item.getName().equals("aa")).findAny().orElse(null);
    
    • 1

    返回多条记录

    List<Object> list = common.stream().filter(item -> item.getName().equals("aa"))
    	.collect(Collectors.toList())
    
    • 1
    • 2

    根据条件判断是否存在
    anyMatch:只要有一个就会返回 true。

    boolean exist = userData.userList.stream()
                    .anyMatch(u -> u.getUserName().equals(user.getUserName()));
    
    • 1
    • 2

    allMatch:所有元素都满足就返回 true。

    boolean exist = userData.userList.stream()
                    .allMatch(u -> u.getUserName().equals(user.getUserName()));
    
    • 1
    • 2

    提取对象 List 中的某一字段生成新的 List:

    List<String> bkMajor = list.stream()
    	.map(ZsbBkSchool::getBkMajor)
    	.collect(Collectors.toList());
    
    • 1
    • 2
    • 3

    提取对象 List 中的某几个字段生成新的 List:

    List<UserVO> bkMajor = list.stream().map(user -> {
        UserVO vo = new UserVO();
        vo.setUserId(user.getUserId());
        vo.setUserName(user.getUserName());
        return vo;
    }).collect(Collectors.toList());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    List 集合转字符串,逗号隔开

    // 如何把list集合拼接成以逗号分隔的字符串 a,b,c  
    List<String> list = Arrays.asList("a", "b", "c"); 
     
    // 第一种方法,可以用stream流  
    String join = list.stream().collect(Collectors.joining(","));  
    System.out.println(join); // 输出 a,b,c  
     
    // 第二种方法,其实String也有join方法可以实现这个功能  
    String join = String.join(",", list);  
    System.out.println(join); // 输出 a,b,c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    List 选取两个字段转 Map

    Map<Integer, String> map = list.stream().collect(Collectors.toMap(Entity::getId, Entity::getType));
    // 上面的代码可能会报错(value 为 null 时)
    Map<Integer, String> map = list.stream().collect(HashMap::new, (k, v) -> k.put(v.getId(), v.getType()),HashMap::putAll);
    
    • 1
    • 2
    • 3

    List 选取某一个字段作为key,value 为对象转为 Map

    // 使用 Lambda 表达式
    Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, User -> User));
    
    // 使用 Function.identity() 简洁写法,也是返回对象本身
    Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
    
    // 当 key 冲突的解决办法,这里选择第二个 key 覆盖第一个 key
    Map<Integer,User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    List 选取某一个字段作为key,value 为 JSON 字符串

    Map<String, String> collect = userList.stream().collect(Collectors.toMap(User::getOpenId, JSON::toJSONString));
    
    • 1

    List 选去某一个 BigDecimal 字段或其他数值字段进行相加

    // 使用Stream的reduce方法将BigDecimal字段的值相加
    BigDecimal sum = numbers.stream()
        .reduce(BigDecimal.ZERO, BigDecimal::add);
    
    // 使用Stream的mapToInt和sum方法对Item对象的price字段进行累加
    BigDecimal total = items.stream()
        .map(Item::getPrice)
        .reduce(BigDecimal.ZERO, BigDecimal::add);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    List 使用 stream 进行去重

    List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5, 6, 6, 7);
    
    List<Integer> distinctNumbers = numbers.stream()
        .distinct()
        .collect(Collectors.toList());
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    python学习笔记——文件
    HALCON 2D高精密测量项目全流程解析
    Node.js环境配置级安装vue-cli脚手架
    10个优秀的Python库,实用且有趣
    零担物流市场数据,市场热点,政策规划,竞争情报分析
    浏览器交互:Cookies、事件、浏览历史
    劳务派遣人员工资计算方法
    iNFTnews|Web3的核心是什么?一些需要考虑的观点
    程序员保密协议
    5分钟的时间制作一个反弹球游戏
  • 原文地址:https://blog.csdn.net/qq_33271461/article/details/134358210