0
0

More than 1 year has passed since last update.

2次元のListのkeyに同じ値が入っている場合にまとめる方法

Posted at

List配列の中にListの形で最初のStringに同じ値が入っていた場合は他のListに配列として入れるようなコードの書き方がわからなくて調べた。

JavaのListでは、List<String, String>のような二つのジェネリック型を指定することはできなく、おそらくこちらでできる。

PairMap.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が同じものを新しいリストに格納している。また、それらのリストは、キーを基にしたマップに格納される。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0