java stream流 部分使用心得

这次任务接触到了stream这个方法,感觉还是很实用的,借此记录一下使用。

1 stream.map

 

 

 

 

 

commercialTenantStores集合,我想获取集合中的某个值,就可以用map,重新过滤做成一个新的集合。

 

 当然,ideal也很人性化的自动提示。

获取某个值,还可以lamda表达式获取。例如,這種形式。

 

 

2 stream.filter

过滤

 

 

 

这里我用到的是,取两个集合的交集部分,按照以往我会写双重for循环,费时费力。

现在是要过滤就能实现。

filter()里面写你想要得到的结果,过滤掉你不要的结果。

 两个集合,我想取相同的值。就可以用 contains 方法,取不同的前面加个 !就行。

 

 

 

 2 stream.多个条件并用。

 

 

 当熟练掌握的时候,可以当个并用,提高开发效率。

 

4 stream.

 

 

 这里面的方法特别多,我只用到几个,等以后用的时候,再做记录。

  8.31 号 新增 

4.1 求和 

有两种方法

 

 

 

 4.2 求平均

 

 

  4.3 分页 skip().limit()

 stream.skip().limit() 搭配使用

  类似 sql里的 limit   A, B

  skip(A).limit(B) 

 

 

 

 

  4.4排序   sorted(Comparator.comparing())   null 排在最后/最前

倒序

 sorted(Comparator.comparing()).reversed()

正序

 sorted(Comparator.comparing())

 

 

如果排序字段为null,正常就会报错,得加入排序规则

Comparator.nullsLast  null值放在最后
Comparator.nullsFirst  null值放在最前
trackingDTOS.stream().sorted(Comparator.comparing(TrackingDTO::getStartTime, Comparator.nullsLast(Date::compareTo))).collect(Collectors.toList());

 

 

   4.5 分组 Collectors.groupingBy

 

   4.6 配合optional方法   stream 两个集合 相等赋值

9.15 当然也可以写,两个foreach 类似双重for 循环 ,但是显得不够有逼格。

 

 4.7 stram.min  max  取集合中某个字段的最大值和最小值 

 

4.8 .flatMap  扁平化map

stream.Map api 是对集合进行操作,

stream.fltaMap 是对集合里面的集合进行操作。(个人理解),把所有的集合全部扁平化。

 

这里提供两个写法:

 

测试类:

 public static void main(String[] args) {
        List<User> userList= new ArrayList<>();
        User user = new User();
        user.setId(1);
        user.setName("测试1");
        userList.add(user);
        User user1 = new User();
        user1.setId(2);
        user1.setName("测试2");
        userList.add(user1);


        List<people> peopleList= new ArrayList<>();
        people p = new people();
        p.setCity("芜湖");
        p.setCityid(101);
        peopleList.add(p);
        people p1 = new people();
        p1.setCity("虹口");
        p1.setCityid(103);
        peopleList.add(p1);
        user.setPeople(peopleList);
        user1.setPeople(peopleList);

        List<people> collect = userList.stream().flatMap(c -> c.getPeople().stream()).distinct().collect(Collectors.toList());
        List<people> people = userList.stream().map(User::getPeople).flatMap(Collection::stream).collect(Collectors.toList());

  这里的  user 是一个集合  里面 还嵌套一个 people 集合

 

 

 

这时候 我们需要子集合的内容,从外层集合取里层集合的内容,就用到了flatmap方法。

 

 可以看出,两种写法的结果都是一致的。

        User user = new User();
        List<User> users = new ArrayList<>();
        users.add(user);
        User user2 = new User();
        user2.setId(1);
        user.setId(2);
        user2.setAge(12);
        user.setAge(13);
        users.add(user2);

        List<AdminUser> adminUserList = new ArrayList<>();
        AdminUser adminUser = new AdminUser();
        adminUser.setId(1);
        AdminUser adminUser1 = new AdminUser();
        adminUser1.setId(2);
        adminUserList.add(adminUser);
        adminUserList.add(adminUser1);
        System.out.println(adminUserList);

        adminUserList.stream().forEach(a->{
            Optional<User> optional = users.stream().filter(r ->r.getId().equals(a.getId())).findFirst();
            if(optional.isPresent()){
                a.setAge(optional.get().getAge());
            }
        });

        System.out.println(adminUserList);

    }

 

 

待续。。。

posted @ 2021-01-18 11:12  未确定  阅读(257)  评论(0编辑  收藏  举报