首页 > 其他分享 >爱上Stream

爱上Stream

时间:2022-10-07 18:44:56浏览次数:110  
标签:Stream plusOne Collectors stream map list collect 爱上

流式编程,一般是对集合的一些操作,我只能说,用过就爱上了,特别的方便,写出来的代码也很简洁。

+--------------------+       +------+   +------+   +---+   +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+       +------+   +------+   +---+   +-------+
  • 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。

这里我们举例来自集合的情况

我们先生成一个list,后面我们就用这个集合做操作

List<String> list = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");

一、过滤filter

这个方法很容易理解,就是过滤的意思,你可以用条件判断去过滤,也可以用正则表达式来过滤

1.正则 asPredicate()

将集合里的所有元素都去匹配这个pattern,匹配上了才会进入续的操作里。

Pattern pattern = Pattern.compile("\\$\\$\\((.*)\\)");
list.stream().filter(pattern.asPredicate()).collect(Collectors.toList());

2.条件过滤

这个就很简单了,以下的代码就是过滤出元素为"abc"的

list.stream().filter(i -> i == "abc").collect(Collectors.toList());

二、元素映射map

这个可以当做是,我们可以通过map将集合的所有元素进行任何操作,比如我将集合里的所有元素后面都加上后缀字符"suffix"

list.stream().map(i -> i + "suffix").collect(Collectors.toList());

当然,我们这里可以做任何操作,那么我写一个方法,比如叫做plusOne(),然后把每个元素都丢进去这个方法,得到一个结果

list.stream().map(TestAction::plusOne).collect(Collectors.toList());

private String plusOne(String s) {
        return s + "1";
}

这个是拓展性很高的方法,你可以做你任何想对这个元素做的事情

三、排序Sort

这个顾名思义就是排序,很简单,不需要说写什么。查了一下不知道能不能用自己写的比较器来使用。

list.stream().map(TestAction::plusOne).sorted().collect(Collectors.toList());

四、结果Collectors

Collectors可以把前面操作的结果生成你想要的集合

根据某个元素分组,如果这里的元素是水果的话,你可以根据它的“种类”分组

list.stream().map(TestAction::plusOne).sorted().collect(Collectors.groupingBy());

拼接,注意,这里返回的是String类型

list.stream().map(TestAction::plusOne).sorted().collect(Collectors.joining(","));

五、去重

list.stream().distinct();

六、并行

 

标签:Stream,plusOne,Collectors,stream,map,list,collect,爱上
From: https://www.cnblogs.com/carryup/p/16760249.html

相关文章