从列表中提取键值对 并添加到一个新的列表中

问题描述 投票:1回答:1

我有一个 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));
            }
       }

enter image description here

java loops sorting arraylist key-value
1个回答
1
投票

如果你被允许使用流,你可以使用以下代码片段。

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}
© www.soinside.com 2019 - 2024. All rights reserved.