我有以下方式的地图列表:
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
过滤输入以仅保留包含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]
我想这就是你想要的:
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"));
}
}
}
在这里,您对映射的使用有点奇怪,因为您的实际键“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,我想有一个列表,它按键的对应值排序(最小到最大)。我的尝试是: