我正在过滤两个流并在中间进行分割,但最后我无法将结果收集到List中。你能告诉我我做错了吗?
这是我的代码
List<Long> average_population = total_population.stream()
.flatMapToLong( a-> number_of_cities.stream().mapToLong( b-> b/a ))
.collect(null, Collectors.toList() ); <- error
这是我在最后一行得到的错误。
LongStream类型中的方法collect(Supplier,ObjLongConsumer,BiConsumer)不适用于参数(null,Collector&gt;) 类型不匹配:无法从收集器转换&gt;致ObjLongConsumer
答案 0 :(得分:1)
LongStream.collect
需要3个参数。
你可能正在寻找这个:
List<Long> average_population =
total_population.stream()
.flatMapToLong(a -> number_of_cities.stream().mapToLong(b -> b / a))
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
但实际上,坚持Long
并没有给你带来多少好处,
使用flatMap
编写会更简单,
这将允许您使用更简单的collect
:
List<Long> average_population =
total_population.stream()
.flatMap(a -> number_of_cities.stream().map(b -> b / a))
.collect(Collectors.toList());
答案 1 :(得分:1)
如果您想在List<Long>
中收集结果,则需要设置值。 flatMapToLong
提供LongStream
,其中包含原始long
,而不是Long
。您可以使用.boxed()运算符从长流中制作盒装对象。
LongStream.of(1l, 2l, 3l).boxed().collect(Collectors.toList());
所以我猜它会变成:
List<Long> average_population = total_population.stream()
.flatMapToLong(a -> number_of_cities.stream().mapToLong(b -> b / a))
.boxed()
.collect(Collectors.toList());