我有一个 List<Object>
包含有Key Value对的对象.我想循环浏览,如果一个Key值包含一个特定的Value,我想拉出这个对象,并创建一个新的对象。我想拉出该对象并创建一个新的 List<Object>
只用这些值。我怎样才能做到这一点?
for (int i = 0; i < dbResults.size(); i++) {
Map<String, Object> map = (Map<String, Object>) dbResults.get(i);
for (String key : map.keySet()) {
System.out.println("Key: " + key + " maps to value: " + map.get(key));
}
}
如果你被允许使用流,你可以使用以下代码片段。
String valueToSearch = "ronseal";
List<Object> list = dbResults.stream()
.filter(i -> (i instanceof Map)) // filter out non-maps (optional step)
.map(i -> (Map<String, Object>) i) // convert objects to maps
.flatMap(m -> m.values().stream()) // merge values from maps into single stream
.filter(e -> e.equals(valueToSearch)) // filter by the given value
.collect(Collectors.toList()); // get new list
list.forEach(System.out::println);
//------
// in case you need to get list of maps
List<Map<String, Object>> listMaps = dbResults
.stream()
.map(i -> (Map<String, Object>) i)
.filter(m -> m.containsValue(valueToSearch))
.collect(Collectors.toList());
listMaps.forEach(System.out::println);
输出:
ronseal
{test=@newbayfox, Tag=ronseal, str_id=14753491397}