Java 8 平面图、流、收集

标签 java java-8

我有这样的情况

class A {
    private B b;

    public B getB() {
        return b;
    }
}

还有另一个B类

class B {
    private List<C> c;

    public List<C> getListC() {
        return c;
    }
}

现在类 C 包含两个实例变量

class C {
     private int id;
     private String name;

     public int getId() { 
         return id;
     }

     public String getName() {
         return name;
     }
}

现在我想使用java 8实现以下目标

List<C> newListC = a.getB().getListC();
Map<Integer, String> map = new HashMap<>();

for(C c : newListC) {
  map.put(c.getId,c.getName());
}

我尝试过很多次,但每次都会遇到不同的问题。 我的代码:

    Optional<A> a=Optional.of(new A());
    Map<Integer, String> map= a.map(A::getB)
                            .flatMap(b ->
                                    b.getListC()
                                            .stream()
                                            .collect(Collectors.toMap(
                                        C::getId,
                                        C::getName
                                                    )
                                            )
                            );

错误消息:

Error:(164, 33) java: incompatible types: no instance(s) of type
variable(s) U,R,A,capture#1 of ?,T,K,U exist so that
java.util.Optional<U> conforms to
java.util.Map<java.lang.Integer,java.lang.String>

提前致谢

最佳答案

虽然我遇到了一些编译错误,因为我看到了一些拼写错误,但是

尝试:

    List<C> newListC= new A().getB().getListC();

    Map<Integer, String> stringMap = newListC.stream()
            .collect(Collectors
                    .toMap(C::getId, C::getName));

如果您修复了编译问题,它应该会发出与 map 的非流版本等效的结果。

关于Java 8 平面图、流、收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36830058/

相关文章:

java - 如何制作接受尾随垃圾的 DateTimeFormatter?

Java 8 只映射到值类型集合

java - 如何将对象从 Firestore 转换为数组列表?

java - 如何制作一个永远不会选择两次相同图像的功能

java - 我应该什么时候将任务进度保存到服务器?

java - 如何将 lambda 表达式重构为方法引用?

java-8 - 向接口(interface)引入默认方法真的可以保持向后兼容性吗?

java - JSch 在不更改代码的情况下禁用特定密码

java - 当其他线程在 map 上进行插入/删除时迭代 map 键

java - 在 javafx 2.0 中创建未修饰的阶段