Java中stream流的常见用法

Java中stream流的常见用法

这篇文章主要是记录stream流的用法,因为stream流比较常用,并且一些操作较复杂,记录在此,以后参考。

1、filter用法

主要是用来过滤集合中的元素,较常用。

        List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        // 过滤出address=tianjin的
        List<User> list1 = list.stream().filter(item -> "tianjin".equals(item.getAddress())).collect(Collectors.toList());
        System.out.println(list1);

2、peek用法

主要是用来修改元素的状态,比如其中对象的字段等

        List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        // peek操作主要用于修改集合中的元素
        // 修改元素中的address为guangzhou
        List<User> list2 = list.stream().peek(item -> item.setAddress("guangzhou")).collect(Collectors.toList());
        System.out.println(list2);

3、map用法

主要是用来替换集合中的元素

        List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        // map操作主要是修改集合元素本身,也有一部分peek的功能
        // 将list的元素替换成元素的字段或者替换成其他的对象
        List<Integer> list3 = list.stream().map(User::getId).collect(Collectors.toList());
        System.out.println(list3);
        // map也可以用来peek的功能,比如下面例子,不过idea会提示用peek的
        List<User> list4 = list.stream().map(item -> {
            item.setAddress("beijing");
            return item;
        }).collect(Collectors.toList());
        System.out.println(list4);

4、flatmap用法

主要是将集合中的元素换成stream流

        List<String> list1 = Arrays.asList("a", "b");
        List<String> list2 = Arrays.asList("1", "2", "3");

        // flatmap主要是将集合中的元素换成stream流
        List<String> list3 = list1.stream().flatMap(item -> list2.stream().map(i -> item + i)).collect(Collectors.toList());
		// 将list1和list2中的元素拼接成list3
        // [a1, a2, a3, b1, b2, b3]
        System.out.println(list3);

5、list转map用法

这种场景是用于根据对象已知字段查找集合中对应元素

 		List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        // 将list转成map
        // 一般这种场景是用于根据对象已知字段查找集合中对应元素
        // 这种一般用于key是唯一的,不然异常,或者用下一种
        Map<Integer, User> map = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));
        Map<Integer, User> map1 = list.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));

6、分组用法

这种一般用于按照元素的字段等条件进行分组

        List<User> list = new ArrayList<>();
        list.add(new User(1, "小赵", "beijing"));
        list.add(new User(2, "小钱", "shanghai"));
        list.add(new User(3, "小孙", "tianjin"));
        list.add(new User(4, "小李", "nanjing"));
        list.add(new User(5, "小周", "shenzhen"));

        Map<Integer, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getId));

你可能感兴趣的:(java,java)