当前位置: 首页 > 知识库问答 >
问题:

在地图列表中通过键查找值

苏墨竹
2023-03-14

我有一张地图清单list

可以用以下方式表示:

[{AddressField=AddressUsageType, AddressValue=PRINCIPAL},
 {AddressField=StreetNumber, AddressValue=2020},
 {AddressField=StreetName, AddressValue=Some street}]

我想获得特定地址字段地址值

例如,我想获取键"AddressUsageType"的值"PRINCIPAL"

我尝试过使用过滤器和许多其他映射函数,但最终没有找到合适的解决方案。

这是我的代码片段,获取第一个键值对的值:

DataTable table;
List<Map<String,String>> input= table.asMaps(String.class, String.class);

    String AddressField = input.get(0).get("AddressField");
    String AddressValue = input.get(0).get("AddressValue");
    System.out.println("AddressField " +AddressField);
    System.out.println("AddressValue " +AddressValue);

以下是上述片段的输出:

AddressField AddressUsageType
AddressValue PRINCIPAL

共有3个答案

糜博远
2023-03-14

过滤输入以只保留包含AddressField=AddressUsageType的映射。然后使用. map函数提取AddressValue项,并将它们收集到结果列表中。

public static void main(String[] args) {
    List<Map<String, String>> input = new ArrayList<>();
    Map<String, String> map = new HashMap<>();
    map.put("AddressField", "AddressUsageType");
    map.put("AddressValue", "PRINCIPAL");
    input.add(map);

    map = new HashMap<>();
    map.put("AddressField", "StreetNumber");
    map.put("AddressValue", "2020");
    input.add(map);
    map = new HashMap<>();
    map.put("AddressField", "StreetName");
    map.put("AddressValue", "Some street");
    input.add(map);

    map = new HashMap<>();
    map.put("AddressField", "AddressUsageType");
    map.put("AddressValue", "NOT_PRINCIPAL");
    input.add(map);
    
    List<String> collect = input.stream().filter(e -> e.get("AddressField").equals("AddressUsageType"))
            .map(e -> e.get("AddressValue")).collect(Collectors.toList());
    System.out.println(input);
    System.out.println(collect);
}

输出是

[{地址字段=地址用户类型,地址值=PRINCIPAL},{地址字段=街道号,地址值=2020},{地址字段=街道名称,地址值=一些街道},{地址字段=地址用户类型,地址值=NOT_PRINCIPAL}]

[校长,不是校长]

欧阳俊捷
2023-03-14

我想这就是你要找的:

Map<String, String> map = data.stream()
        .filter(m -> m.values().contains("AddressUsageType"))
        .findFirst()
        .orElse(null);

if (map != null) {
    System.out.println("AddressField " + map.get("AddressField"));
    System.out.println("AddressValue " + map.get("AddressValue"));
}

这里还有一个测试主

public class Test {
    public static void main(String[] args) {
        List<Map<String, String>> data = new ArrayList<>();

        Map<String, String> map1 = new HashMap<>();
        map1.put("AddressField", "AddressUsageType");
        map1.put("AddressValue", "PRINCIPAL");
        data.add(map1);

        Map<String, String> map2 = new HashMap<>();
        map2.put("AddressField", "StreetNumber");
        map2.put("AddressValue", "2020");
        data.add(map2);

        Map<String, String> map3 = new HashMap<>();
        map3.put("AddressField", "StreetName");
        map3.put("AddressValue", "Some street");
        data.add(map3);

        Map<String, String> map = data.stream()
                .filter(m -> m.values().contains("AddressUsageType"))
                .findFirst()
                .orElse(null);

        if (map != null) {
            System.out.println("AddressField " + map.get("AddressField"));
            System.out.println("AddressValue " + map.get("AddressValue"));
        }
    }
}
易和怡
2023-03-14

在这里,您对映射的使用有点奇怪,因为您的实际键“AddressUsageType”是映射中的一个值,而每个映射只是存储在静态键后面的一对键和值。如果你不能改变这一点,你可以这样做:

String key = "AddressUsageType";
String result = "";

for (Map<String,String> map : input)
{
    if (map.containsValue(key))
    {
        result = map.get("AddressValue");
        break;
    }
}

System.out.println(key + " is " + result);
 类似资料:
  • 我有一个模型,其中包含一个内部字段

  • 我正在使用MongoDB搜索包含列表列表的元素,其中列表中至少有一个项目与搜索参数匹配。 这是我目前拥有的结构的一个例子。 我想搜索数据列表中值为“绿色”的所有项目。 我目前有这个: 但是,不会返回任何结果。

  • 我有以下方式的地图列表: 我想从地址字段的值中获取地址值。例如, 我想从键值"AddressUsageType"中获取值"PRINCIPAL" 我尝试过使用过滤器和许多其他MAP函数,但最终没有找到合适的解决方案。 这是我的代码片段,获取第一个键值对的值: 以下是上述片段的输出:

  • 那么,问题是如何通过使用关键字列表在某些站点的联系人页面上动态地找到所有的文本字段和提交按钮?

  • 问题内容: 关于你的第一个问题:该代码非常好,并且如果与其中的一个元素相等就可以正常工作。也许你尝试查找与其中一项不完全匹配的字符串,或者你使用的浮点值会导致不准确。 关于第二个问题:如果“查找”列表中的内容,实际上有几种可能的方法。 检查里面是否有东西 这是你描述的用例:检查列表中是否包含某些内容。如你所知,你可以使用in运算符: 过滤集合 即,找到满足特定条件的序列中的所有元素。你可以为此使用

  • 如何找到python列表的中间位置? 这只是一个函数的例子,它可以找到任何列表的中间,你可以用列表理解来做这件事吗? 编辑:这与去掉中间点不同,因为我只想打印出中间值,如果列表是奇数,我想返回两个中间值,就像接受的答案一样。没有像另一个问题那样得到中值,而是得到两个值的平均值。