如何使用Java流在第一个和最后一个嵌套对象之间创建map <k,v>? - java

假设我有以下课程:

class A {
    int id;
    List<B> b;
}

class B {
    int id;
}

我想在A.id到B.id的列表之间创建一个映射(Map<Integer, List<Integer>>,其中key = A.id,而List<Integer>对应于每个A的B.id字段的列表)。我尝试了Collectors.groupingByCollectors.mapping的各种组合,但没有效果。有人可以帮我吗?

参考方案

您可以将toMap收集器与合并功能一起使用来解决此问题。这是它的外观。

Map<Integer, List<Integer>> resultMap = aList.stream()
    .collect(Collectors.toMap(A::getId,
        a -> a.getB().stream().map(B::getId)
            .collect(Collectors.toList()), (l1, l2) -> {
                    l1.addAll(l2);
                    return l1;
                }));

但是,如果给定的一组A对象具有不同的id值,则您可以省去合并功能,该功能是toMap收集器的第三个参数。这是简化版。

Map<Integer, List<Integer>> resultMap = aList.stream()
    .collect(Collectors.toMap(A::getId, 
        a -> a.getB().stream().map(B::getId)
            .collect(Collectors.toList())));

实例化类型<?>的泛型类 - java

我正在为SCJP / OCPJP学习,并且遇到了一个对我来说很奇怪的示例问题。该示例代码实例化了两个通用集合:List<?> list = new ArrayList<?>(); List<? extends Object> list2 = new ArrayList<? extends Object>(); …

无法从ArrayList <String>转换为List <Comparable> - java

当我写下面的代码时,编译器说 无法从ArrayList<String>转换为List<Comparable>private List<Comparable> get(){ return new ArrayList<String>(); } 但是当我用通配符编写返回类型时,代码会编译。private List&l…

合并List <T>和List <Optional <T >> - java

鉴于: List<Integer> integers = new ArrayList<>(Arrays.asList( 10, 12 )); List<Optional<Integer>> optionalIntegers = Arrays.asList( Optional.of(5), Optional.em…

List <Dog>是List <Animal>的子类吗?为什么Java泛型不是隐式多态的? - java

我对Java泛型如何处理继承/多态感到困惑。假设以下层次结构-动物(父母)狗-猫(儿童)因此,假设我有一个方法doSomething(List<Animal> animals)。根据继承和多态性的所有规则,我假设List<Dog>是List<Animal>,而List<Cat>是List<Animal&g…

在HashMap <String,String>上循环时出现问题 - java

我有一个基本的HashMap。我正在尝试遍历它,并从Map中获取键和值。这是我所拥有的:Map<String, String> myMap = versionExtractor.getVersionInfo(); for(String key : myMap.keySet()) System.out.println(key); System.ou…