【问题标题】:Taking Key Value pairs from a List<Object> and adding to a new List<Object>从 List<Object> 获取键值对并添加到新 List<Object>
【发布时间】:2020-06-18 00:49:42
【问题描述】:

我有一个List&lt;Object&gt;,其中包含带有键值对的对象。 我想循环遍历一个键值是否包含某个值。我想拉那个对象并创建一个新的List&lt;Object&gt;,只有这些值。我怎么能这样做?

 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));
            }
       }

【问题讨论】:

  • 使用List&lt;Object&gt;的原因是什么?如果您正在处理键值对,Map 会更有意义。

标签: java loops sorting arraylist key-value


【解决方案1】:

如果允许使用流,可以使用以下代码sn-p:

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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2020-08-27
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多