• JDK8新特性之stream


    stream中有很多方法,讲一些常用的。

    1.forEach(),遍历方法,很简单,对于一般的遍历可以替代for循环

    List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
    		
    strings.stream().forEach(System.out::println);
    

      stream()是先将数组或列表流化,然后forEach()遍历并打印。这里用到::会在另一篇博文中专门说。

    2.map(),用于映射数组或列表的结果,即对元素进行操作,然后按顺序输出或保存。

      

    List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
            // 获取对应的平方数
    List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

      一般可以用于类型转换、或列表转map等。

    3.filter(),过滤器,一般用于对元素数据的过滤

    List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
    // 获取空字符串的数量
    long count = strings.stream().filter(string -> string.isEmpty()).count();

      过滤方法的实现一般用->去实现,可以在括号中定制实现过滤方法。

    4.limit(),limit 方法用于获取指定数量的流

    Random random = new Random();
    random.ints().limit(10).forEach(System.out::println);

    5.sorted(),排序方法,很好理解。

    Random random = new Random();
    random.ints().limit(10).sorted().forEach(System.out::println);

    6.Collector 进行一些归约操作

    方法很多,这个后面详细说

    List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
    List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
     
    System.out.println("筛选列表: " + filtered);
    String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
    System.out.println("合并字符串: " + mergedString);

    toList是将流转换成List

    join是将字符串以规定的格式输出,甚至可以规定前缀、后缀。

    List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); 
    
    List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); 
    
    System.out.println("筛选列表: " + filtered); 
    
    StringmergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", ")); 
    
    System.out.println("合并字符串: " + mergedString);

    7.distinct()去重,对于基本的包装类型可以直接去重,如String、Integer等。自定义类要重写equal()和hashcode(),不然失败。

    List<ListPromtionUserResultDto> listPromtionResult = userFeign
              .listPromtionUser(promtionUserIdList.stream().distinct()
                                    .collect(Collectors.toList())).getData();

    附一段生产代码,这里是调用另一个工程查的数据。去重完了之后要.collect(Collectors.toList())。转成list

    这样不必使用set过滤数据,而且set与list转换比较麻烦。

    看到别人的讲解,可以参考一下:https://blog.csdn.net/weixin_44337261/article/details/89037647?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-4&spm=1001.2101.3001.4242

    下班记得打卡
  • 相关阅读:
    缓存
    vue 生命周期:
    mongodb 数据库 增删改查
    微信小程序左右分类滚动列表
    4月29日记
    什么是MVVM
    什么是mvc
    React路由
    TodoList案例
    React中兄弟组件传值
  • 原文地址:https://www.cnblogs.com/onlyzhangmeng/p/11901795.html
Copyright © 2020-2023  润新知