2016-04-23 10 views
0

私はArrayList<ArrayList<Integer>> Cを持っています。私はそれを単純な2D配列にマップするためにStreamを使いたいと思います。私の最初のステップは、int型の配列のArrayListの中にそれをマッピングしていたと私はこの思い付いた:stream()で定義されているJava 8関数map()

this.C = C.stream().map(new Function<ArrayList<Integer>, int[]>(){ 
      public int[] apply(ArrayList<Integer> person) { 
       return new int[0]; 
      } 
     }) 

しかし、それはmap(Function<? super ArrayList<Integer>,? extends R>)が私Function<ArrayList<Integer>,int[]>には適用できないことを私に伝えます。 ここで問題となっているパラメータはどれか、その理由はわかりません。

+0

arraylist内のarraylistsが異なるサイズを持つ可能性があるため、これらの変換に注意する必要があります。 – Everv0id

答えて

1

Java 8は型推論を使用します。タイプはコードの使用方法によって決まります。あなたの式の型は、あなたのthis.Cが、型推論は、混乱と問題はむしろのタイプよりも、それは特定できませんでした最初のタイプであると仮定します、他のタイプの場合は

Stream<int[]> c = .... 

なければなりません式が割り当てられている型と一致しません。

public static int[][] to2d(List<? extends List<Integer>> matrix) { 
    return matrix.stream() 
        // convert each List<Integer> to an int[] 
        .map(a -> a.stream().mapToInt(i -> i).toArray()) 
        // convert the int[]s to an int[][] 
        .toArray(int[][]::new); 
} 
+0

うわー、私はそれをC:Dに割り当てようとしていることに気づいていません。D この例もありがとうございます。 – seMikel

+0

これは型推論で、エラーメッセージが間違っている場所に直接関係していないことを意味します。 –

+0

また、あなたが 'int [] G = B.stream()。map(Integer :: intValue).toArray(int [] :: new);' ] :: new'? Bが 'ArrayList ' – seMikel

関連する問題