我正在学习Java8的新特性,在试验流(java.util.stream.Stream)和收集器时,我意识到流不能使用两次。
有没有办法重用它?
发布于 2016-03-28 10:32:46
发布于 2016-03-28 21:49:09
如果您希望达到重用流的效果,则可以将流表达式包装在Supplier中,并在需要新的表达式时调用myStreamSupplier.get()。例如:
Supplier<Stream<String>> sup = () -> someList.stream();
List<String> nonEmptyStrings = sup.get().filter(s -> !s.isEmpty()).collect(Collectors.toList());
Set<String> uniqueStrings = sup.get().collect(Collectors.toSet());发布于 2017-04-12 16:46:18
正如其他人所说的,“不,你不能”。
但对于许多基本操作,记住方便的summaryStatistics()是很有用的:
因此,不是:
List<Person> personList = getPersons();
personList.stream().mapToInt(p -> p.getAge()).average().getAsDouble();
personList.stream().mapToInt(p -> p.getAge()).min().getAsInt();
personList.stream().mapToInt(p -> p.getAge()).max().getAsInt();您可以:
// Can also be DoubleSummaryStatistics from mapToDouble()
IntSummaryStatistics stats = personList.stream()
.mapToInt(p-> p.getAge())
.summaryStatistics();
stats.getAverage();
stats.getMin();
stats.getMax();https://stackoverflow.com/questions/36255007
复制相似问题