Stream使用来处理list、array这些集合的新API。链式编程,使用Stream处理代码更简洁。
steam() : 创建普通流。
parallelStream: 创建并行流。并行流是对流的处理是并行的,不是顺序的。
public List codelist = Arrays.asList("1", "2", "3", "4", "", "5", "6");
public Stream getStream() {
return codelist.stream();
}
@Test
public void paralletTest() {
codelist.parallelStream().forEach(System.out::println);
}
strean对象的forEach方法,用于遍历。参数是Consumer接口
void forEach(Consumer super T> action);
用法
codelist.parallelStream().forEach(System.out::println);
打印
map返回一个新的stream,对每个源元素进行操作处理。参数是function
Stream map(Function super T, ? extends R> mapper);
用法
@Test
public void mapTest() {
getStream().filter((s) -> {
return s != null && !"".equals(s);
}).map((a) -> {
return String.valueOf(Integer.valueOf(a) * 2);
}).forEach(System.out::println);
}
结果
filter是过滤器,下面是过滤list中的空string的例子。
return stream.filter((s) -> {
return s != null && !"".equals(s);
}).collect(Collectors.toList());
limit用于获得指定数量的流,参数是long
Stream limit(long maxSize);
下面是获得5位流
getStream().filter((s) -> {
return s != null && !"".equals(s);
}).limit(5).forEach(System.out::println);
sorted用于排序,参数Comparator
Stream sorted(Comparator super T> comparator);
下面是按值排序的
@Test
public void sortTest() {
getStream().filter((s) -> {
return s != null && !"".equals(s);
}).sorted((a, b) -> {
return Integer.valueOf(b) - Integer.valueOf(a);
}).forEach(System.out::println);
}
Collecors有许多规约操作,如将流转成list或其他。这里是返回list和字符串。
@Test
public void collectTest() {
List filterList = getStream().filter((s) -> {
return s != null && !"".equals(s);
}).collect(Collectors.toList());
System.out.println("filter list : " + filterList);
String joinlist = getStream().filter((s) -> {
return s != null && !"".equals(s);
}).collect(Collectors.joining(","));
System.out.println("joinlist:" + joinlist);
}
IntSummaryStatistics可以对数字的集合做统计。如常见的最大最小值、平均值、总和。
@Test
public void intSummaryStatistics() {
List numbers = Arrays.asList(1, 3, 5, 7, 9, 11, 13, 15);
IntSummaryStatistics stats = numbers.stream().mapToInt((x)->x).summaryStatistics();
System.out.println("最大的数:" + stats.getMax());
System.out.println("最小的数:" + stats.getMin());
System.out.println("和:" + stats.getSum());
System.out.println("数据长度:" + stats.getCount());
System.out.println("平均数:" + stats.getAverage());
}
结果