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)