首页 > 解决方案 > Java 流 - 将 int 数组映射并存储到 Set 中

问题描述

我有一个数组[5, 6, 7, 3, 9],我想将数组中的每个元素减去 2,然后将其存储在 a 中Set,所以我所做的是

Set<Integer> mySet = Arrays.stream(arr1).map(ele -> new Integer(ele - 2)).collect(Collectors.toSet());

但我在这里遇到两个例外

  1. The method collect(Supplier<R>, ObjIntConsumer<R>, BiConsumer<R,R>) in the type IntStream is not applicable for the arguments (Collector<Object,?,Set<Object>>)"
  2. Type mismatch: cannot convert from Collector<Object,capture#1-of ?,Set<Object>> to Supplier<R>

这些错误是什么意思,我该如何解决这里的Java Stream操作问题?

标签: javacollectionsjava-stream

解决方案


它看起来像arr1is an int[],因此Arrays.stream(arr1)返回 an IntStream。你不能申请.collect(Collectors.toSet())一个IntStream

你可以把它装箱到Stream<Integer>

Set<Integer> mySet = Arrays.stream(arr1)
                           .boxed()
                           .map(ele -> ele - 2)
                           .collect(Collectors.toSet());

甚至更简单:

Set<Integer> mySet = Arrays.stream(arr1)
                           .mapToObj(ele -> ele - 2)
                           .collect(Collectors.toSet());

推荐阅读