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

posted @ 2019-12-16 16:04  了悟  阅读(268)  评论(0编辑  收藏  举报