私は考えているのJava 8:地図の<string、HashSetの<String>>
のJava 8のマップにN×Nのアレイをマップしたいを作成するために、アレイ(N×M個の)フィルタ毎[I] [その0]要素はキーであり、j> 0のすべての[i] [j]はマップ内のすべてのキーの値のリストです。
ありがとうございました。 :)
これは私のクラスである:
public class GroupingDishes {
public static void main(String[] args) {
String[][] dishes = {
{"Salad", "Tomato", "Cucumber", "Salad", "Sauce"},
{"Pizza", "Tomato", "Sausage", "Sauce", "Dough"},
{"Quesadilla", "Chicken", "Cheese", "Sauce"},
{"Sandwich", "Salad", "Bread", "Tomato", "Cheese"}
};
Map<String, HashSet<String>> groupDishes = groupingDishes(dishes);
}
public static Map<String, HashSet<String>> groupingDishes(String[][] dishes) {
Map<String, HashSet<String>> mapFood = new HashMap<>();
for (int i = 0; i < dishes.length; i++) {
String food = dishes[i][0];
for (int j = 0; j < dishes[i].length; j++) {
if (mapFood.containsKey(food)) {
HashSet<String> existingIngredients = mapFood.get(dishes[i][0]);
existingIngredients.add(dishes[i][j]);
mapFood.put(food, existingIngredients);
} else {
HashSet<String> newIngredient = new HashSet<>();
mapFood.put(food, newIngredient);
}
}
}
return mapFood;
}
}
2番目の関数ではなく、 'arr - > new HashSet <>(配列.asList(arr).subList(1、arr.length))'または 'リストを作成する' arr - > Arrays.asList(配列.copyOfRange(arr、1、arr.length)) '。 – Holger
@Holger私はなぜサブリストが良いか知りたいのですが。仲介配列を使用する2番目の提案は、配列を作成するために配列が不要なため、それ以上のものはありません。 – janos
提案に中間配列はありません。最初の提案は、元の配列をラップする*ビュー*からセットを作成します。 2番目の提案は、新しい配列を*ラップする*リストを作成します。いずれの提案もストリーム操作よりも短く効率的です。 'skip'と' limit'のストリームはうまく実行されません。また、 'Collector'は結果の初期容量のヒントを得ません。 – Holger