• Stream()流常用方法


    sorted排序

     List<Integer> integers = List.of(124, 2, 15, 12, 51, -5, 5);
            // 按照自然排序
            integers.stream().sorted().forEach(System.out::println);
    
            System.out.println("---------");
    
            List<Integer> integers2 = List.of(124, 2, 15, 12, 51, -5, 5);
            // 定制排序(大到小),需要传入Comparator接口(如果流中的是引用类型,只能用定制排序)
            // 简写:integers2.stream().sorted((e1,e2) -> e2-e1).forEach(System.out::println);
            integers2.stream().sorted((e1,e2) -> {
                return e2-e1;
            }).forEach(System.out::println);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    创建动态list,可以添加元素

    // 创建三个user
    User user1 = new User("111", "18", 180);
    User user2 = new User("222", "18", 175);
    User user3 = new User("333", "19", 170);
    
    List<User> userList = new ArrayList<>();
    userList.add(user1);
    userList.add(user2);
    userList.add(user3);
    
    // stream流,创建的是动态数组,可以添加元素
    List<User> userList = Stream.of(user1, user2, user3).collect(Collectors.toList());
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    如果创建一个固定长度的list,可以使用Arrays.asList(…args)直接返回一个list

    // 本质是将一个数组转成list,数组的大小是固定的,所以此list不能添加元素
    // 如果调用add方法增加新的元素,会报异常:java.lang.UnsupportedOperationException
    List<String> s = Arrays.asList("1","2","3") 
    
    • 1
    • 2
    • 3

    取对象的某一例

    List<String> userNameList = userList.stream().map(User::getName).collect(Collectors.toList());
    
    • 1

    过滤,或者说是根据一个判断条件筛选出目标对象

    List<User> newUserList = new ArrayList<>();
    // if判断
    for (User user : userList) {
    	if(user.getName() != null) {
    		newUserList.add(user); 
    	}
    }
    
    // 获取userName不为空的user的List
    List<User> userList = userList.stream().filter(user-> user.getName() != null).collect(Collectors.toList());
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    分组

    Map<String, List<User>> map = new HashMap<>();
    // if判断
    for (User user : userList) {
    	if (map.get(user.getAge()) == null) {
    		map.put(user.getAge(), new ArrayList());
    	}
    	map.get(user.getAge()).add(user);
    }
    
    //Stream流:groupingBy
    Map<String, List<User>> map =userList.stream().collect( Collectors.groupingBy(User::getAge, Collectors.toList()));
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    求和

    // int、double、long:
    double max = userList.stream().mapToDouble(User::getHeight).sum();
    
    • 1
    • 2

    Map、List互转

    list转map

    Map<String, User> userMap = new Map<>();
        for (User user : userList) {
    		userMap.put(user.getName(), user);
    	}
    
    • 1
    • 2
    • 3
    • 4

    用Collectors的toMap方法转换List,一般会遇到两个问题。
    (1)转换map,key重复问题;
    代码中使用(key1,key2)->key2表达式可以解决此类问题,如果出现重复的key就使用key2覆盖前面的key1,也可以定义成(key1,key2)->key1,保留key1,根据自己的业务场景来调整。
    (2)空指针异常,即转为map的value是null。这个可以用filter过滤;

    	Map<String, User> userMap= userList.stream().collect(Collectors.toMap(User::getName, Function.identity(),(key1, key2)->key2));
    
    
    • 1
    • 2

    map转list:

       List<User> userList = userMap.entrySet().stream().map(e ->e.getValue()).collect(Collectors.toList());
    
    
    • 1
    • 2

    做判断

    anyMatch()

        userList.stream().anyMatch(user -> user.getHeight() > 175);
    
    
    • 1
    • 2

    allMatch()

        userList.stream().allMatch(user -> user.getHeight() > 175);
    
    
    • 1
    • 2

    noneMatch()

        userList.stream().noneMatch(user -> user.getHeight() > 175);
    
    
    • 1
    • 2

    求取目标和

        userList.stream().filter(user -> user.getHeight() > 175).count();
    
    
    • 1
    • 2
  • 相关阅读:
    Pytest系列-数据驱动@pytest.mark.parametrize(7)
    黑豹程序员-java语法分析入门案例(模拟代码编译器解析过程)
    three.js 基础01
    【计算机网络笔记四】应用层(一)DNS域名解析
    基于Django和Vue的商城管理系统
    成为IEEE学生会员
    项目进展(三)-电机驱动起来了,发现了很多关键点,也遇到了一些低级错误,
    一文详解窄脉冲LIV测试系统的特点和功能
    Git 备忘单—你应该知道的 50 个 Git 命令
    selenium安装和python中基本使用
  • 原文地址:https://blog.csdn.net/weixin_44889526/article/details/126040376