У меня есть ситуации, когда у меня естьJava 8 flatmap, поток, собирать
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>
Заранее спасибо
'a.getB(). GetListC(). Stream(). Collect (toMap (C :: getId, C :: getName))'. Вы передумали это. –
Что означал @BoristheSpider, было 'Collectors.toMap', если только он не сделал статический импорт, но для этого лучше быть немного более явным. – Andreas
@boris может оставить свой комментарий в качестве ответа – Bohemian