Java中的Stream流
公司中用了很多Stream流,经常用来筛选出PO类型的List中想要的数据,所以还是比较常用的。
Stream是Java8的新成员,允许以声明式方式处理数据集合
-
把集合转换为流stream
-
操作stream流 stream流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果
有两种操作符
- 中间操作符
- 终止操作符
中间操作符
流方法 |
含义 |
示例 |
filter |
用于通过设置的条件过滤出元素 |
List strings = Arrays.asList(“abc”, “”, “bc”, “efg”, “abcd”,“”, “jkl”);List filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); |
distinct |
返回一个元素各异(根据流所生成元素的hashCode和equals方法实现)的流。 |
List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);numbers.stream().filter(i -> i % 2 == 0).distinct().forEach(System.out::println); |
limit |
会返回一个不超过给定长度的流。 |
List strings = Arrays.asList(“abc”, “abc”, “bc”, “efg”, “abcd”,“jkl”, “jkl”);List limited = strings.stream().limit(3).collect(Collectors.toList()); |
skip |
返回一个扔掉了前n个元素的流。 |
List strings = Arrays.asList(“abc”, “abc”, “bc”, “efg”, “abcd”,“jkl”, “jkl”);List skiped = strings.stream().skip(3).collect(Collectors.toList()); |
map |
接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映射成一个新的元素(使用映射一词,是因为它和转换类似,但其中的细微差别在于它是“创建一个新版本”而不是去“修改”)。 |
List strings = Arrays.asList(“abc”, “abc”, “bc”, “efg”, “abcd”,“jkl”, “jkl”);List mapped = strings.stream().map(str->str+“-itcast”).collect(Collectors.toList()); |
flatMap |
使用flatMap方法的效果是,各个数组并不是分别映射成一个流,而是映射成流的内容。所有使用map(Arrays::stream)时生成的单个流都被合并起来,即扁平化为一个流。 |
List strings = Arrays.asList(“abc”, “abc”, “bc”, “efg”, “abcd”,“jkl”, “jkl”);Stream flatMap = strings.stream().flatMap(Java8StreamTest::getCharacterByString); |
sorted |
返回排序后的流 |
List strings1 = Arrays.asList(“abc”, “abd”, “aba”, “efg”, “abcd”,“jkl”, “jkl”);List sorted1 = strings1.stream().sorted().collect(Collectors.toList()); |
/**
* 功能描述:根据条件过滤集合数据 filter
* @return : void
*/
@Test
public void filter(){
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
out.println(filtered);
}
/**
* 功能描述:去除集合中重复数据 distinct
* @return : void
*/
@Test
public void distinct(){
List<String> strings = Arrays.asList("abc", "abc", "bc", "efg", "abcd","jkl", "jkl");
List<String> distincted = strings.stream().distinct().collect(Collectors.toList());
out.println(distincted);
}
/**
* 功能描述:指定获取集合前x条数据,重新构造一个新的集合 limit
* @return : void
*/
@Test
public void limit(){
List<String> strings = Arrays.asList("abc", "abc", "bc", "efg", "abcd","jkl", "jkl");
List<String> limited = strings.stream().limit(3).collect(Collectors.toList());
out.println(limited);
}
/**
* 功能描述:排除集合前x条数据,把后面的数据重新构造一个新的集合 skip
* @return : void
*/
@Test
public void skip(){
List<String> strings = Arrays.asList("abc", "abc", "bc", "efg", "abcd","jkl", "jkl");
List<String> skiped = strings.stream().skip(3).collect(Collectors.toList());
out.println(skiped);
}
/**
* 功能描述:对集合中所有元素统一处理 map
* @return : void
*/
@