我继承了一些代码,并且有一个定义为max_len
以下是存储在此地图中的一组示例值:
*max_len = 0;
我怎样才能得到A1.Item Number作为字符串列表?我打算将此转换为json并使用json路径。但由于我可以使用地图本身,是否有更简单的方法?
我正在使用java 8。
谢谢!
答案 0 :(得分:0)
您可以像这样获得所需的结果:
String itemNumber = "1234";
List<String> result =
myMap.values()
.stream()
.flatMap(Collection::stream)
.map(Map::entrySet)
.flatMap(Collection::stream)
.filter(e -> e.getKey().equals(itemNumber))
.map(Map.Entry::getValue)
.collect(Collectors.toList());
这很可能被多次使用,在这种情况下,将逻辑封装到一个方法中是明智的:
static List<String> getListOfValuesByItemNumber(
Map<String, Collection<Map<String, String>>> map,
String itemNumber){
return map.values()
.stream()
.flatMap(Collection::stream)
.map(Map::entrySet)
.flatMap(Collection::stream)
.filter(e -> e.getKey().equals(itemNumber))
.map(Map.Entry::getValue)
.collect(Collectors.toList());
}
然后简单地将对地图的引用和项目编号作为第二个参数传递,并检索一个值列表,其中地图输入键等于项目编号。
此外,非流方法将是:
static List<String> getListOfValuesByItemNumber(
Map<String, Collection<Map<String, String>>> map,
String itemNumber){
List<String> accumulator = new ArrayList<>();
map.values()
.forEach(collection ->
collection.forEach(m -> m.forEach((k, v) -> {
if(k.equals(itemNumber))
accumulator.add(v);
})));
return accumulator;
}
答案 1 :(得分:0)
如果我理解正确,这就是你想要的:
public static List<String> extractFieldValues(
Map<String, Collection<Map<String, String>>> horribleMess,
String fieldName) {
return horribleMess.values()
.stream()
.flatMap(Collection::stream)
.map(map -> map.get(fieldName))
.collect(Collectors.toList());
}
但正如上面的评论所示,地图/收藏/地图嵌套是一个维护噩梦,你应该通过重构来摆脱它。