Kev*_*ing 8 java collections java-stream
我有一个 的数组[5, 6, 7, 3, 9]
,我想将数组中的每个元素减去 2,然后将其存储在 a 中Set
,所以我所做的是
Set<Integer> mySet = Arrays.stream(arr1).map(ele -> new Integer(ele - 2)).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
但我在这里有两个例外
The method collect(Supplier<R>, ObjIntConsumer<R>, BiConsumer<R,R>) in the type IntStream is not applicable for the arguments (Collector<Object,?,Set<Object>>)
”Type mismatch: cannot convert from Collector<Object,capture#1-of ?,Set<Object>> to Supplier<R>
这些错误是什么意思,我如何通过Java Stream
操作解决这里的问题?
Era*_*ran 10
它看起来像arr1
一个int[]
,因此Arrays.stream(arr1)
返回一个IntStream
。您不能应用.collect(Collectors.toSet())
上IntStream
。
您可以将其装箱为Stream<Integer>
:
Set<Integer> mySet = Arrays.stream(arr1)
.boxed()
.map(ele -> ele - 2)
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
甚至更简单:
Set<Integer> mySet = Arrays.stream(arr1)
.mapToObj(ele -> ele - 2)
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
Arrays.stream(int[])
返回一个IntStream
. 并且IntStream
不提供collect()
采用Collector
.
如果您需要使用Collectors.toSet()
,那么您需要一个Stream<Integer>
,您可以调用mapToObj
它:
Set<Integer> mySet = Arrays.stream(arr1)
.mapToObj(ele -> ele - 2)
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
154 次 |
最近记录: |