如果对象中的特定字段与单独列表中的任何值匹配,则从列表中获取对象<Object>
Get Object from List<Object> if a particular field in Object matches any value from a separate list
我有一个包含所有商店编号的字符串列表:
List<String> stores = new ArrayList<>;
还有一个对象列表,例如:
List<UserStores> userStores = new ArrayList<>;
现在,这个 UserStores class 看起来像这样:
public class UserStores {
private String storeNo;
private String storeName;
private String country;
}
如果上面给出的 'stores' 列表中存在任何 storeNo,我想从此 List<UserStores>
获取所有 UserStores。
例如,
stores = {1,2};
UserStores = [ {2, qwe, wqew}, {1,ABC, India}, {3, asd, USA} ];
expected result = [{1,ABC, India}, {2, qwe, wqew}]; in the order of stores present in 'stores' list,
如何使用 stream/collectors 获取此信息?
我当前的代码是这样的..可以改进吗?
private static List<UserStores> getModifiedUserStoresList(
List<String> stores, List<UserStores> userStores
) {
List<UserStores> userStoreList = new ArrayList<>();
for(int i = 0; i < stores.size(); i++) {
for(int j = 0; j < userStores.size(); j++) {
if(userStores.get(j).getStoreNo().equals(stores.get(i))) {
userStoreList.add(userStores.get(j));
break;
}
}
}
return userStoreList;
}
您可以使用流 API 并过滤 UserStores 列表:
List<UserStores> filtered = userStores.stream()
.filter(u -> stores.contains(u.getStoreNo()))
.collect(Collectors.toList());
为了保持正确的顺序并保留重复项,应首先创建映射 Map<String, UserStores>
(例如,使用 Collectors.toMap
),然后 stores
应通过适当的键进行流式传输和映射:
private static List<UserStores> getModifiedUserStoresList(
List<String> stores, List<UserStores> userStores
) {
Map<String, UserStores> map = userStores.stream()
.collect(Collectors.toMap(UserStores::getStoreNo, us -> us, (a, b) -> a));
return stores.stream()
.filter(map::containsKey)
.map(map::get)
.collect(Collectors.toList());
}
我有一个包含所有商店编号的字符串列表:
List<String> stores = new ArrayList<>;
还有一个对象列表,例如:
List<UserStores> userStores = new ArrayList<>;
现在,这个 UserStores class 看起来像这样:
public class UserStores {
private String storeNo;
private String storeName;
private String country;
}
如果上面给出的 'stores' 列表中存在任何 storeNo,我想从此 List<UserStores>
获取所有 UserStores。
例如,
stores = {1,2};
UserStores = [ {2, qwe, wqew}, {1,ABC, India}, {3, asd, USA} ];
expected result = [{1,ABC, India}, {2, qwe, wqew}]; in the order of stores present in 'stores' list,
如何使用 stream/collectors 获取此信息?
我当前的代码是这样的..可以改进吗?
private static List<UserStores> getModifiedUserStoresList(
List<String> stores, List<UserStores> userStores
) {
List<UserStores> userStoreList = new ArrayList<>();
for(int i = 0; i < stores.size(); i++) {
for(int j = 0; j < userStores.size(); j++) {
if(userStores.get(j).getStoreNo().equals(stores.get(i))) {
userStoreList.add(userStores.get(j));
break;
}
}
}
return userStoreList;
}
您可以使用流 API 并过滤 UserStores 列表:
List<UserStores> filtered = userStores.stream()
.filter(u -> stores.contains(u.getStoreNo()))
.collect(Collectors.toList());
为了保持正确的顺序并保留重复项,应首先创建映射 Map<String, UserStores>
(例如,使用 Collectors.toMap
),然后 stores
应通过适当的键进行流式传输和映射:
private static List<UserStores> getModifiedUserStoresList(
List<String> stores, List<UserStores> userStores
) {
Map<String, UserStores> map = userStores.stream()
.collect(Collectors.toMap(UserStores::getStoreNo, us -> us, (a, b) -> a));
return stores.stream()
.filter(map::containsKey)
.map(map::get)
.collect(Collectors.toList());
}