栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【java--Stream流操作--实践总结】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【java--Stream流操作--实践总结】

Stream流实践

//for循环 
List list = new ArrayList();
        list.add("A");
        list.add("B");
        list.add("C");
        AtomicInteger i = new AtomicInteger();
        list.forEach(item -> {
            i.getAndIncrement();
            System.out.println(item + "00" + i);
        });
User user1 = new User();
        user1.setId(1);
        user1.setName("A");
        user1.setDateTime(LocalDateTime.now());
        User user2 = new User();
        user2.setId(2);
        user2.setName("B");
        user2.setDateTime(LocalDateTime.of(2021,11,15,0,0,0));
        User user3 = new User();
        user3.setId(2);
        user3.setName("C");
        user3.setDateTime(LocalDateTime.of(2021,11,17,0,0,0));
//List 转 Map 相同的key不按照条件过滤的话 会报错
//这里我们采用取时间最大的来进行过滤重复key的数据
List userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        Map collect = userList.parallelStream().collect(Collectors.
        toMap(User::getId,
                Function.identity(), (c1, c2) -> c1.getDateTime().isAfter(c2.getDateTime()) ? c1 : c2));
        for (Integer key:collect.keySet()){
            User user = collect.get(key);
            System.out.println(user);
        }
 //结果
User(id=1, name=A, dateTime=2021-11-19T14:06:42.297)
User(id=2, name=C, dateTime=2021-11-17T00:00)

System.out.println("---------分割线-----------");
//分组重复数据也可以按照新值和旧值来进行筛选
//选择在重复的Key中留一个
        Map collects = userList.stream().
                collect(Collectors.toMap(User::getId, user -> user, (oldValue, newValue) -> newValue));

//结果
---------分割线-----------
User(id=1, name=A, dateTime=2021-11-19T14:06:42.297)
User(id=2, name=C, dateTime=2021-11-17T00:00)
//GroupBy去重 结果是list
Map> collect1 = userList.parallelStream().collect(Collectors.groupingBy(User::getId, Collectors.toList()));
        for (Integer key:collect1.keySet()){
            List user = collect1.get(key);
            System.out.println(user);
        }
//结果
[User(id=1, name=A, dateTime=2021-11-19T14:06:42.297)]
[User(id=2, name=B, dateTime=2021-11-15T00:00), User(id=2, name=C, dateTime=2021-11-17T00:00)]

//GroupBy去重 结果是聚合统计
userList.stream().collect(Collectors.groupingBy(User::getId,Collectors.counting())).forEach((id, count) -> {
            System.out.println(id+"---"+count);
        });
结果:
1---1
2---2

System.out.println("---------分割线-----------");
//分组 带函数处理的形式
        Map> collect3 = userList.stream().
                collect(Collectors.groupingBy
                        (e -> 1 == e.getId()));
        for (Boolean key:collect3.keySet()){
            List user = collect3.get(key);
            System.out.println(user);
        }
//结果
[User(id=2, name=B, dateTime=2021-11-15T00:00), User(id=2, name=C, dateTime=2021-11-17T00:00)]
[User(id=1, name=A, dateTime=2021-11-19T15:06:31.227)]
//利用Stream流进行分页 
System.out.println("---------分割线-----------");
        //当前页
        int current = 1;
        //每页记录
        int size = 2;
        System.out.println(userList.stream().skip((current - 1) * size).limit(size).collect(Collectors.toList()));
//利用Stream流 按照指定字段  倒序排序
System.out.println("---------分割线-----------");
List resultList = userList.stream()
                .sorted(Comparator.comparing(User::getId)
                        .reversed()).collect(Collectors.toList());
        System.out.println(resultList);
//结果
[User(id=2, name=B, dateTime=2021-11-15T00:00), User(id=2, name=C, dateTime=2021-11-17T00:00), User(id=1, name=A, dateTime=2021-11-19T15:18:09.893)]
//利用Stream流 map进行拿到指定字段的所有值
System.out.println("---------分割线-----------");
 ArrayList list = new ArrayList<>();

list.add(new UserTest("liubei","111",40));
list.add(new UserTest("zhangfei","222",30));
list.add(new UserTest("guanyu","333",35));

System.out.println("ntest2--age:");
        list.stream().map(n->n.getAge())
                .forEach(n-> System.out.println(n));
//结果
test2--age:
40
30
35
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572717.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号