私は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>>
含まれ、listUser
行listUser 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
からlistUser
とlistId
、私はに行を追加する必要があるかどうかを確認するために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_id
でlistUser
とlistId
して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")));