Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lambda 如何使用Java8流从地图列表中找到每个用户的最低分数_Lambda_Java 8_Java Stream - Fatal编程技术网

Lambda 如何使用Java8流从地图列表中找到每个用户的最低分数

Lambda 如何使用Java8流从地图列表中找到每个用户的最低分数,lambda,java-8,java-stream,Lambda,Java 8,Java Stream,假设我有以下地图列表 List<Map<String, Integer>> scores = new ArrayList<>(); scores.add(Collections.singletonMap("user1", 3)); scores.add(Collections.singletonMap("user3", 15)); scores.add(Collections.singletonMap("user1", 1)); scores.add(Col

假设我有以下地图列表

List<Map<String, Integer>> scores = new ArrayList<>();

scores.add(Collections.singletonMap("user1", 3));
scores.add(Collections.singletonMap("user3", 15));
scores.add(Collections.singletonMap("user1", 1));
scores.add(Collections.singletonMap("user2", 5));
scores.add(Collections.singletonMap("user2", 23));
scores.add(Collections.singletonMap("user1", 10));
我试过了,但没用

Map<String, Integer> result = scores.stream()
    .flatMap(m -> m.entrySet().stream())
    .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.minBy(Comparator.comparingInt(Map.Entry::getValue))));
Map result=scores.stream()
.flatMap(m->m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,Collectors.minBy(Comparator.comparingInt(Map.Entry::getValue)));
谁能告诉我怎么做


提前感谢。

下游收集器返回
可选
,但只需
整数即可。因此,您应该使用来调整下游收集器。也考虑使用静态方法。

Map<String, Integer> result = scores
        .stream()
        .flatMap(m -> m.entrySet().stream())
        .collect(Collectors.groupingBy(Map.Entry::getKey,
            Collectors.collectingAndThen(
                Collectors.minBy(Map.Entry.comparingByValue()),
                opt -> opt.get().getValue())));
Map结果=分数
.stream()
.flatMap(m->m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey、,
收藏,收藏,然后(
Collectors.minBy(Map.Entry.comparingByValue()),
opt->opt.get().getValue());
映射结果=
scores.stream()
.flatMap(map->map.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey、,
Map.Entry::getValue,
数学:min);

另一种方式,不使用流,但具有Java 8功能:

Map<String, Integer> result = new HashMap<>();
scores.forEach(map -> map.forEach((k, v) -> result.merge(k, v, Integer::min)));
Map result=newhashmap();
scores.forEach(map->map.forEach((k,v)->result.merge(k,v,Integer::min));

这将使用该方法为已存在的密钥选择最小值。

感谢您的解释。
Map<String, Integer> result = 
    scores.stream()
          .flatMap(map -> map.entrySet().stream())
          .collect(Collectors.toMap(Map.Entry::getKey,
                                    Map.Entry::getValue,
                                    Math::min));
Map<String, Integer> result = new HashMap<>();
scores.forEach(map -> map.forEach((k, v) -> result.merge(k, v, Integer::min)));