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

在Java的映射列表中按键查找值

孙书
2023-03-14

我有以下方式的地图列表:

List<Map<String,String>> input = 
[{AddressField=AddressUsageType, AddressValue=PRINCIPAL},  {AddressField=StreetNumber, AddressValue=2020}, {AddressField=StreetName, AddressValue=Some street}]

我想从地址字段的值中获取地址值。例如,

我想从键值"AddressUsageType"中获取值"PRINCIPAL"

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

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

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的映射。然后使用提取地址值条目。映射函数并将其收集到结果列表中。

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}]

[校长,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);
 类似资料:
  • 有一张单子 如何过滤列表,通过获得最高的映射组,然后使用Java Stream组合到列表中?结果示例如下: ps:如果在多个地图中有相同的值,请将它们全部保留在列表中。 初始代码:

  • 问题内容: 我有地图,我想要一个列表,其中按其对应的值对键(最小到最大)进行了排序。我的尝试是: 但这只是给我一个条目列表,如何在不丢失顺序的情况下获得类型列表? 问题答案: 您说要按值排序,但是您的代码中没有。传递一个lambda(或方法引用)来告诉它您想如何排序。 而您想获得钥匙;用于将条目转换为键。

  • 问题内容: 获取与映射中的最大值关联的键的最简单方法是什么? 我相信,当您想要对应于最大值的键时,Collections.max(someMap)将返回最大键。 问题答案: 基本上,你需要遍历地图的条目集,同时记住“当前已知的最大值”和与其关联的键。(当然,或者只是包含两者的条目。) 例如:

  • 假设我们有一个键-值映射的数据结构,其中键本身也是一个键-值映射。例如: 现在,假设我们要查询此映射中与键的某个键值子集匹配的所有顶级键/值。示例: 我们的查询是“给我所有key值,其中key包含,它将返回第一个和第三个值将返回所有同时具有和的键值,生成第二个值。显然,我们可以在每一个查询的完整地图中进行搜索,但我正在寻找比这更高效的方法。 我四处查看了一下,但是找不到一个高效、易用的C解决方案。

  • 我有如下所示的电影实体。我需要根据电影代码对所有实体进行分组,实现如下。现在我需要按扫描日期时间按降序{latest first}对哈希映射的值进行排序。我可以在按流程分组时执行此操作。这里的关键是电影实体的列表。

  • 我有map,我想有一个列表,它按键的对应值排序(最小到最大)。我的尝试是: