Java でデータ構造を扱う場合、リストからマップへの変換は一般的な変換です。この変換を実現するにはいくつかの方法があり、最適なアプローチは特定の要件と使用する Java バージョンによって異なります。
リストをマップに変換する従来のアプローチでは、手動で反復処理を行う必要がありました。リストを使用してマップに値を割り当てます。例:
List<Object[]> results; Map<Integer, String> resultsMap = new HashMap<>(); for (Object[] o : results) { resultsMap.put((Integer) o[0], (String) o[1]); }
このアプローチは機能しますが、特に大きなリストの場合、退屈で冗長になる可能性があります。
Java 8 では、 Streams API は、リストをマップに変換するためのより簡潔かつ効率的な方法を提供します。 Collectors クラスは、toMap() など、データ操作を簡素化するいくつかのメソッドを提供します。このメソッドは 2 つの引数を受け入れます:
toMap() は次のように使用できます:
List<Item> list = IntStream.rangeClosed(1, 4) .mapToObj(Item::new) .collect(Collectors.toList()); // [Item [i=1], Item [i=2], Item [i=3], Item [i=4]] Map<String, Item> map = list.stream() .collect(Collectors.toMap(Item::getKey, item -> item));
この例では、キー マッピング関数は次のとおりです。 item::getKey、値マッピング関数は item -> です。 item.
toMap() メソッドは 3 番目の引数である二項演算子を取ることもできます。これは、重複キーがある場合に値を結合するために使用されます:
List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5, 6); Map<String, Integer> map = intList.stream() .collect(toMap(i -> String.valueOf(i % 3), i -> i, Integer::sum));
この場合、二項演算子は Integer::sum で、重複キーの値を加算します。結果は、キーが 3 で割ったときの余り、値が元の値の合計であるマップになります。
リストをマップに変換するための最良のアプローチJava は、特定の要件と使用される Java バージョンによって異なります。従来の変換では、手動ループを使用できます。特に Java 8 以降では、より効率的かつ簡潔な変換を行うために、Streams API と Collectors.toMap() メソッドが強力な代替手段を提供します。
以上がJava でリストをマップに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。