Java 8 使用Java8StreamsAPI进行嵌套查找
我们如何使用Java8StreamsAPI在这里获得预期的输出 A1有B1,B2Java 8 使用Java8StreamsAPI进行嵌套查找,java-8,java-stream,Java 8,Java Stream,我们如何使用Java8StreamsAPI在这里获得预期的输出 A1有B1,B2 A2有B1,B2,B3 B1、B2属于C1 B3属于C2 因此,对于C1,计数应为4,因为B1,B2出现4次 同样,当B3出现1次时,C2的计数将为1 List<String> A= new ArrayList<>(); A.add("A1"); A.add("A2"); Map<String, List<Stri
A2有B1,B2,B3 B1、B2属于C1
B3属于C2 因此,对于C1,计数应为4,因为B1,B2出现4次
同样,当B3出现1次时,C2的计数将为1
List<String> A= new ArrayList<>();
A.add("A1");
A.add("A2");
Map<String, List<String>> AMap = new HashMap<>();
AMap.put("A1", Arrays.asList("B1", "B2"));
AMap.put("A2", Arrays.asList("B1", "B2", "B3"));
Map<String, String> BMap = new HashMap<>();
CMap.put("B1", "C1");
CMap.put("B2", "C1");
CMap.put("B3", "C2");
分两步
List<String> all = AMap.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
Map<String, Long> result = CMap.entrySet().stream()
.collect(Collectors.groupingBy(
Entry::getValue,
Collectors.summingLong(
x -> all.stream().filter(y -> y.equals(x.getKey())).count())));
System.out.println(result); // {C1=4, C2=1}
List all=AMap.values()
.stream()
.flatMap(集合::流)
.collect(Collectors.toList());
映射结果=CMap.entrySet().stream()
.collect(收集器.groupingBy(
条目::getValue,
我的名字叫summingLong(
x->all.stream().filter(y->y.equals(x.getKey()).count());
System.out.println(结果);//{C1=4,C2=1}
对于A列表中的每个键,我将获取每个B键,它将从CMap中获取每个C值。然后平面映射流,按标识分组并计算值
import static java.util.Collections.emptyList;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
...
Map<String, Long> res = A.stream()
.flatMap(a -> AMap.getOrDefault(a, emptyList()).stream().map(BMap::get))
.collect(groupingBy(identity(), counting()));
导入静态java.util.Collections.emptyList;
导入静态java.util.function.function.identity;
导入静态java.util.stream.Collectors.counting;
导入静态java.util.stream.Collectors.groupingBy;
...
Map res=A.stream()
.flatMap(a->AMap.getOrDefault(a,emptyList()).stream().map(BMap::get))
.收集(分组方式(标识(),计数());
哦,这太好了!
import static java.util.Collections.emptyList;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
...
Map<String, Long> res = A.stream()
.flatMap(a -> AMap.getOrDefault(a, emptyList()).stream().map(BMap::get))
.collect(groupingBy(identity(), counting()));