List配列の中にListの形で最初のStringに同じ値が入っていた場合は他のListに配列として入れるようなコードの書き方がわからなくて調べた。
JavaのList
では、List<String, String>
のような二つのジェネリック型を指定することはできなく、おそらくこちらでできる。
Pair
やMap.Entry
のような2つの要素を持つ型をリストに格納することで実現が可能。
リスト内で最初のString
値が同じ要素を見つけた場合には、それらを別のリストに移動する、ということで可能。
以下は一例
まず、Apache Commons Langライブラリを使用してPair
型を利用する。もし使用する場合は、そのライブラリをプロジェクトに追加する必要がある。
import org.apache.commons.lang3.tuple.Pair;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// 初期のペアリストを作成
List<Pair<String, String>> originalList = new ArrayList<>();
originalList.add(Pair.of("key1", "value1"));
originalList.add(Pair.of("key2", "value2"));
originalList.add(Pair.of("key1", "value3"));
originalList.add(Pair.of("key2", "value4"));
originalList.add(Pair.of("key3", "value5"));
// 結果を保存するマップを作成
Map<String, List<Pair<String, String>>> resultMap = new HashMap<>();
// 元のリストを走査
for (Pair<String, String> pair : originalList) {
String key = pair.getLeft();
// マップにキーが存在しない場合は新しいリストを作成
resultMap.computeIfAbsent(key, k -> new ArrayList<>()).add(pair);
}
// 結果を表示
resultMap.forEach((key, value) -> System.out.println(key + ": " + value));
}
}
このコードでは、Pair<String, String>
型のリストを作成し、各ペアの最初のString
が同じものを新しいリストに格納している。また、それらのリストは、キーを基にしたマップに格納される。