前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA8 stream() 总结归纳

JAVA8 stream() 总结归纳

作者头像
iiopsd
发布2022-12-23 08:49:11
3100
发布2022-12-23 08:49:11
举报
文章被收录于专栏:iiopsd技术专栏iiopsd技术专栏

stream() 将数组转换为数据流,提供排序、去重、类型转换、过滤等多种操作方法,使代码更加简洁高效。

代码语言:javascript
复制
public class StreamTest {

    List<Integer> list = Arrays.asList(6, 3, 0, 7, 1, 2, 5, 1);
    int[] arr = new int[]{6, 3, 0, 7, 1, 2, 5, 1};
    /**
     * 排序
     *
     * 重点掌握两种写法:
     * list.stream().sorted((a, b) -> (a -b)).collect(Collectors.toList());
     * Collections.sort(list2, (a, b) -> b.compareTo(a));
     */
    @Test
    public void testSort() {
        // 升序
        System.out.println(list.stream().sorted().collect(Collectors.toList()));
        System.out.println(list.stream().sorted(Comparator.comparing(Integer::intValue)).collect(Collectors.toList()));
        System.out.println(list.stream().sorted((a, b) -> (a - b)).collect(Collectors.toList()));
        // 降序
        System.out.println(list.stream().sorted(Comparator.comparing(Integer::intValue).reversed()).collect(Collectors.toList()));
        System.out.println(list.stream().sorted((a, b) -> (b - a)).collect(Collectors.toList()));
        System.out.println(list.stream().sorted((a, b) -> b.compareTo(a)).collect(Collectors.toList()));


        // 扩展其他升序
        List<Integer> list1 = Arrays.asList(6, 3, 0, 7, 1, 2, 5, 1);
        Collections.sort(list1);
        System.out.println(list1);

        List<Integer> list2 = Arrays.asList(6, 3, 0, 7, 1, 2, 5, 1);
        Collections.sort(list2, (a, b) -> (a -b));
        System.out.println(list2);

        // 扩展其他降序
        List<Integer> list3 = Arrays.asList(6, 3, 0, 7, 1, 2, 5, 1);
        Collections.sort(list3, (a, b) -> (b - a));
        System.out.println(list3);
    }

    /**
     * 装箱操作int[] -> List<Integer>
     */
    @Test
    public void testBoxed() {
        List<Integer> list1 = Arrays.stream(arr).boxed().collect(Collectors.toList());
        System.out.println(list1);
    }

    /**
     * 最大值
     */
    @Test
    public void testMaxAndMin() {
        // 正确的写法
        System.out.println(list.stream().max(Integer::compare).get());
        System.out.println(list.stream().mapToInt(Integer::intValue).max().getAsInt());
        System.out.println(Arrays.stream(arr).max().getAsInt());
        System.out.println(Arrays.stream(arr).min().getAsInt());

        // 错误的写法 stream 的max() 和min() 方法是通过判断结果大于或者小于0进行判断的
//        List<Integer> list1 = Arrays.asList(2, 3, 0, 7, 1, -2, 5, 6);
        System.out.println(list.stream().max(Integer::max).get());
        System.out.println(list.stream().min(Integer::min).get());

    }

    /**
     * 使用示例
     */
    @Test
    public void testCollectors() {
        List<String> strList = Arrays.asList("sdkj1", "dhe", "sdfi2", "nvi", "ndfsk", "dfsdf", "1i2jd", "dsjfl", "11", "11");

        // distinct() 去重
        strList = strList.stream().distinct().collect(Collectors.toList());
        System.out.println(strList);

        // filter() 过滤
        List<String> str1 = strList.stream().filter(e -> e.contains("1")).collect(Collectors.toList());
        System.out.println(str1);

        //map() 方法用于映射每个元素到对应的结果
        List<String> str2 = strList.stream().map(m -> m = m + "map").collect(Collectors.toList());
        System.out.println(str2);


        // limit() 获取指定数量
        System.out.println(strList.stream().limit(3).collect(Collectors.toList()));
        // skip() 跳过指定数量
        System.out.println(strList.stream().skip(3).collect(Collectors.toList()));



        List<Map<String , String>> mapList = new ArrayList<>();
        Map<String, String> m1 = new HashMap<>();
        Map<String, String> m2 = new HashMap<>();
        Map<String, String> m3 = new HashMap<>();

        m1.put("name", "张三");
        m2.put("name", "张三");
        m3.put("name", "王五");
        m1.put("age", "22");
        m2.put("age", "33");
        m3.put("age", "22");
        mapList.add(m1);
        mapList.add(m2);
        mapList.add(m3);

        // Collectors.toList() 返回List
        System.out.println(mapList.stream().map(m -> m.get("name")).collect(Collectors.toList()));

        // Collectors.toSet() 返回Set
        System.out.println(mapList.stream().map(m -> m.get("age")).collect(Collectors.toSet()));

        // Collectors.joining() 拼接数据返回字符串
        System.out.println(mapList.stream().map(m -> m.get("name")).collect(Collectors.joining()));
        System.out.println(mapList.stream().map(m -> m.get("name")).collect(Collectors.joining(",")));

        // Collectors.toMap 返回Map {李四={name=李四, age=33}, 张三={name=张三, age=22}, 王五={name=王五, age=22}}
        // 第三个参数(a, b) -> a 代表如果遇到相同的key 取第一个值,如果没有设置此参数,重复key 会出错 java.lang.IllegalStateException: Duplicate key
        // 第三个参数(a, b) -> b 代表如果遇到相同的key 取最后一个值
        System.out.println(mapList.stream().collect(Collectors.toMap(m -> m.get("name"), Function.identity(), (a, b) -> b)));


    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • stream() 将数组转换为数据流,提供排序、去重、类型转换、过滤等多种操作方法,使代码更加简洁高效。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档