JavaSE-Stream流
从流的出生,经过过滤,排序,去重等各种方法,变成最后的结果,就像水流一样,在代码层面也类似地简单明了,最大的优点是不用自己去保存中间状态,而是可以一直往后操作,直到遇到Stream的终结方法,也像水流一样,Stream流使用后就会改变,一般只用一遍。
1.获取Stream流
一般集合都提供了stream方法,只需要.stream()就可以获取。比如
1 | Set<String> set = new HashSet<>(); |
但Map除外,Map用以下方法获取流:
- keySet()获取Key的Set后stream或者values()获取Value的Set后stream
- entrySet()转化为包含Map.Entry的Set后stream
一般建议用第二种,毕竟Key+Value才是Map的精髓,下面代码里的Entry可以理解为Pair(一对)。
1 | Map<String, Double> map = new HashMap<>(); |
Arrays数组可以通过以下方式获得Stream
- Arrays.stream(YourArrays)
- Stream.of(YourArrays)
2.常用的Stream的中间方法
filter使用lambda式判断条件作为过滤,例如:
1 | List<Double> scores = new ArrayList<>(); |
sorted排序,limit限制数量,skip跳过,distinct去重,都比较简单。其中sorted需要重写排序规则,在集合体系已经讲过,distinct需要重写hashCode和equals,如果是Java自带的基础集合,都不用管这些。
map操作接收一个函数作为参数,支持lambda,比如
1 | List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5); |
concat合并流,后者接在前者后面,比如
1 | Stream<String> stream1 = Stream.of("张三", "李四"); |
3.常用的终结方法
collect里面填诸如Collectors.toList(),Collectors.toSet(),to什么就用什么接收结果。
1 | .collect(Collectors.toList()); |