比較リスト<地図<文字列、オブジェクト>> Javaへ一覧<地図<文字列、文字列>>

食べます:

私はAに取るメソッドを持っているList<String>List<Map<String, Object>>

public List<Map<String, Object>> filterMethod() {

    List<String> listId = this.getUserIds(); //includes only the user id's
    List<Map<String, Object>> listUser = this.getUserDetails(); // includes user_id, user_name, and user_email
    List<Map<String, Object>> filteredListUser = null;

    return filteredListUser;
}

私は何をできるようにしたいことは、これら両者を比較し、新しいを返すですList<Map<String, Object>>

比較は、私は、一例として示しんしたいと思います:


まあ言ってみれば:

List<String> listId = 
    [
        "8000",
        "8002",
        "8004",
        "8006",
        "8010",
        "8012",
        "8014",
        "8016",
        "8018",
        "8020",
        "8022",
        "8024"
    ]
List<Map<String, Object>> listUser =
    [
      {
        "USER_ID": "8001",
        "USER_NAME": "username1",
        "USER_MAIL": "[email protected]"
      },
      {
        "USER_ID": "8002",
        "USER_NAME": "username2",
        "USER_MAIL": "[email protected]"
      },
      {
        "USER_ID": "8003",
        "USER_NAME": "username3",
        "USER_MAIL": "[email protected]"
      },
      {
        "USER_ID": "8004",
        "USER_NAME": "username4",
        "USER_MAIL": "[email protected]"
      },
      {
        "USER_ID": "8005",
        "USER_NAME": "username5",
        "USER_MAIL": "[email protected]"
      },
      {
        "USER_ID": "8006",
        "USER_NAME": "username6",
        "USER_MAIL": "[email protected]"
      },
      {
        "USER_ID": "8007",
        "USER_NAME": "username7",
        "USER_MAIL": "[email protected]"
      }
    ]

私は、フィルタ処理された新しい返却したいList<Map<String, Object>>含まれ、listUserlistUser USER_ID中であるlistId(すなわち:)

List<Map<String, Object>> filteredListUser =
    [
      {
        "USER_ID": "8002",
        "USER_NAME": "username2",
        "USER_MAIL": "[email protected]"
      },
      {
        "USER_ID": "8004",
        "USER_NAME": "username4",
        "USER_MAIL": "[email protected]"
      },
      {
        "USER_ID": "8006",
        "USER_NAME": "username6",
        "USER_MAIL": "[email protected]"
      }
    ]

私は比較する必要があるときに問題が来るuser_idからlistUserlistId、私はに行を追加する必要があるかどうかを確認するためにfilteredListUser

これがそうのように、単純に2つの文字列の配列だった場合、私はこれを行う方法を知っているだろう。

String[] a = {1, 2, 3, 4, 5, 6, 7};
String[] b = {2, 4, 6, 8, 10};

ArrayList<String> c = new ArrayList<String>();

for (int i = 0; i < a.length; i++) {
        if (Arrays.asList(b).contains(a[i])) {
            c.add(a[i]);
   }
}

私は、forループも、リストの比較に適しているでしょうが、私は、私は比較することができますどのようにわからないようにと思うuser_idlistUserlistIdしてList<Map<String, Object>>List<String>

試みと擬似コードの視点として、私が達成しようとしていることはこれです:

public List<Map<String, Object>> filterMethod() {

    List<String> listId = this.getUserIds(); //includes only the user id's
    List<Map<String, Object>> listUser = this.getUserDetails(); // includes user_id, user_name, and user_email
    List<Map<String, Object>> filteredListUser = null;

    for (int i = 0; i < listUser.length; i++) {
        if (listId.contains(listUser.USER_ID[i])) {
            filteredListUser.add(listUser[i]);
        }
    }
    return filteredListUser;
}

任意の助けをいただければ幸いです - 私はここしかしから行くことがどこ全くわからないんだけど!

謝罪これは本当に初歩的な質問であるならば - 私はプログラミングに非常に新しいです。前もって感謝します!

デッドプール :

私は繰り返すだろうList<Map<String, Object>>とに対応する値をチェックするUSER_ID存在ですList<String> listId以下のJava-8ストリームを用いてアプローチであります

List<Map<String, Object>> result = listUser.stream()
                                      .filter(m-> listId.contains(m.get("USER_ID")))
                                      .collect(Collectors.toList());

またはループのための単純なを使用することにより

List<Map<String, Object>> filteredListUser = new ArrayList<>();

for(Map<String, Object> m : listUser) {
        if(listId.contains(m.get("USER_ID"))) {
            filteredListUser.add(m);
        }
    }

また、使用することによってそれを行うことができremoveIf、既存のマップをこの修正

listUser.removeIf(m->!listId.contains(m.get("USER_ID")));

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=316582&siteId=1