如何使用Java Stream map在不同类型之间进行映射?

Dmy*_* S. 5 java generics lambda functional-programming java-stream

我有两个相同大小的数组:

  1. int[] permutation
  2. T[] source

我想这样做

Arrays.stream(permutation).map(i -> source[i]).toArray();
Run Code Online (Sandbox Code Playgroud)

但它不会起作用:不兼容的类型:lambda表达式中的错误返回类型

Ale*_* C. 13

Arrays.stream有一个int[]会给你一个IntStream所以map期待一个IntUnaryOperator(一个功能int -> int).

你提供的函数是int -> TT是一个对象的类型(如果TInteger由于取消装箱,它将起作用,但对于无界泛型类型参数,假设它是泛型类型则不起作用).

你正在寻找的是改为使用mapToObj,它需要一个IntFunction(一个函数int -> T)并给你一个Stream<T>:

//you might want to use the overloaded toArray() method also.
Arrays.stream(permutation).mapToObj(i -> source[i]).toArray();
Run Code Online (Sandbox Code Playgroud)

  • @DmytriiShchadei Tagir Valeev所说的,或者如果你能提供一个`IntFunction <T []>`看看你怎么做到这里http://stackoverflow.com/questions/23057549/lambda-expression-to-convert-array-列表的串到阵列一览的-整数/ 23057743#23057743 (2认同)