2016-11-16 6 views
-2

私はマップ<整数、セット<整数>を持っています。カスタムメソッドで行われた変更に基づいて整数のリストに変換したいと思います。今マップ用のJava 8ストリーム<String、Set <String>>

私はループのための2つを使用していると私は、Javaを使用して、それを行うには良い方法がありますかどうかを知りたかったのは、ここで

をストリーミング私の既存のコードです:

public myMethod(Map<Integer, Set<Integer>> myMap, String a, int b) { 
List<Integer> myIntegerList = new ArrayList<>(); 
    for (int i: myMap.keySet()) { 
     for (int j: myMap.get(i)) { 
      myIntegerList.add(myCustomMethod(i, j, a.concat(b)); 
     } 
    } 
} 

public Integer myCustomMethod(int x, int y, String result) { 
... 
... 
... 

return Integer; 
} 

が、私があれば知りたいと思った私たちjava stream()を使用して一連の整数を反復処理できますか?

+1

あなたの既存のコードを使用することができますので、私は文字列に、変数「b」を変更します戻り値の型はなく( 'void')、' a.concat() 'は' int'引数には適用できません(おそらく 'a + b 'を使った連結が意図されていました。知っている)また、次のメソッドが 'public Integer myCustomMethod(int x、int y、String result) 'です。また、 'return'の後に' Integer'インスタンスが与えられていなければなりません。 –

答えて

0

この方法を試してください。

public void myMethod(Map<Integer, Set<Integer>> myMap, String a, String b) { 
     List<Integer> myIntegerList = new ArrayList<>(); 
     for (int i: myMap.keySet()) 
      myIntegerList.addAll(myMap.get(i).stream().map(j -> myCustomMethod(i, j, a.concat(b))).collect(Collectors.toList())); 
    } 

連結は、文字列を必要とする(ただし、int型が必要な場合は、あなたが方法Integer.toString(b)

+0

マップのエントリセット(chrisrhyno2003の答えなど)を反復する方が、キーセットを反復し、各キーの値を取得するために 'get()'を使用するよりも、一般的にはより良いスタイルと考えられます。これは、ループでもうまくやることができます( 'for(Map.Entry > entry:myMap.entrySet())')。 –

1
List<Integer> myIntegerList = myMap.entrySet().stream() 
      .flatMap(myEntry -> 
       myEntry.getValue().stream() 
        .map(setEntry -> myCustomMethod(myEntry.getKey(), setEntry, a + b))) 
      .collect(Collectors.toList()); 
関連する問題