Stream使用技巧(1)------数据处理技巧

Stream使用技巧(1)------数据处理技巧

一. 背景

做为java8新特性之一的Stream API为开发者带来了极大的便利,它能够对咱们须要操做的集合进行很是复杂的操做,以活的咱们想要的结果.java

本文不会告诉你什么是Stream,毕竟网上花里胡哨的使用教程已经让我目不暇接,本系列博文只是记录一些Stream的使用技巧,便于方便的查找和参考.api

本博文会无限更新,有新的使用方法会逐渐添加进来,若是有小伙伴有新奇的使用技巧,也能够发出来一块儿分享.学习

本文中默认使用的对象user以下:this

@Data
    class User {
        /** 名字 **/
        private String name;
        /** 年龄 **/
        private Integer age;
        /** 性别 true男false女 **/
        private boolean sex;

        User(String name, Integer age, boolean sex) {
            this.age = age;
            this.name = name;
            this.sex = sex;
        }
    }

二. 使用案例

1. List<User>转Map<String, Integer>
  • 需求描述:code

    有一个List集合,其中的每个元素都是对象,想变成一个Map,其中key是对象的一个属性,value也是对象的一个属性或者对象自己.对象

  • 伪代码:教程

    @Test
        public void test1() {
            User a = new User("张三", 20, true);
            User b = new User("李四", 30, true);
            User c = new User("王五", 40, true);
            List<User> list = new ArrayList<User>();
            list.add(a);
            list.add(b);
            list.add(c);
            //变成Map, key是name, value是age
            Map<String, Integer> collect = list.stream().collect(Collectors.toMap(User::getName, User::getAge));
            System.out.println(collect);
        }
  • 结果:开发

    {李四=30, 张三=20, 王五=40}

2. List<User>转List<String>
  • 需求描述:get

    List 对象中,提取出每个User对象的name属性,放在List里面 博客

  • 伪代码:

    @Test
        public void test1() {
            User a = new User("张三", 20, true);
            User b = new User("李四", 30, true);
            User c = new User("王五", 40, true);
            List<User> list = new ArrayList<User>();
            list.add(a);
            list.add(b);
            list.add(c);
            //取出每个user的name变成list
            List<String> collect = list.stream().map(User::getName).collect(Collectors.toList());
            System.out.println(collect);
        }
  • 结果:

    [张三, 李四, 王五]
3. Map<User>转Map<Integer, Map<String, User>>
  • 需求描述

    用户集合中的用户,先按照年龄分组,再按照姓名分组,最终将用户分开

  • 伪代码:

    @Test
        public void test1() {
            User a = new User("张三", 20, true);
            User b = new User("李四", 30, true);
            User c = new User("王五", 40, true);
            User d = new User("花木兰", 40, false);
            User e = new User("李师师", 50, false);
    
            List<User> list = new ArrayList<User>();
            list.add(a);
            list.add(b);
            list.add(c);
            list.add(d);
            list.add(e);
            //取出每个user的name变成list
            Map<Integer, Map<String, User>> collect =
                    list.stream().collect(Collectors.groupingBy(
                            User::getAge,
                            Collectors.toMap(User::getName, x -> x))
                    );
            System.out.println(collect);
        }
  • 结果:

    {50={李师师=SampleStream.User(name=李师师, age=50, sex=false)}, 20={张三=SampleStream.User(name=张三, age=20, sex=true)}, 40={王五=SampleStream.User(name=王五, age=40, sex=true), 花木兰=SampleStream.User(name=花木兰, age=40, sex=false)}, 30={李四=SampleStream.User(name=李四, age=30, sex=true)}}

结语:

在本篇博文中,列举了java8中Stream API在实际开发中的一些应用技巧,记录在这里,之后有须要的时候能够及时查阅

我的公众号<橙耘自留地>日前已经开通,后续博主发布的文章都会一并更新到公众号,若有须要,自行查阅.

关于橙耘自留地,是我我的聚焦互联网技术栈学习分享的一个平台,创立之初是由于目前业内各类技术课程资料层次不齐,褒贬不一,有时候一门课花费高价买入,其实内含草包,有时偶尔低价得之,却又大有干货.所以我会根据你们的意见和评价,选择不一样的技术栈去学习,一为提高我本身的技术,二为你们梳理出质量比较好的课程,以做参考.同时,相关的学习心得也会一并更新到博客和公众号.

qrcode_for_gh_c1462e34b232_344

相关文章
相关标签/搜索