3
아래 코드에서 중첩 된 for 루프를 사용하여 'flatChildren'컬렉션을 새로 만듭니다. 대신 lambdas를 사용하여이 문제를 해결할 수 있습니까?java8 람다를 사용하여 새 목록 만들기
참고 : 부모 및 자식 클래스는 변경할 수 없습니다.
static class Parent {
String name;
List<Child> children;
Parent(String name, List<Child> children) {
this.name = name;
this.children = children;
}
}
static class Child {
String name;
Child(String name) {
this.name = name;
}
}
static class FlatChild {
String parentName;
String name;
public FlatChild(String parentName, String name) {
this.parentName = parentName;
this.name = name;
}
@Override
public String toString() {
return "FlatChild{" +
"parentName='" + parentName + '\'' +
", name='" + name + '\'' +
'}';
}
}
public static void main(String[] args) {
final List<Parent> parents = Arrays.asList(
new Parent("1",
Arrays.asList(new Child("a"), new Child("b"))),
new Parent("1",
Arrays.asList(new Child("c"))),
new Parent("2",
Arrays.asList(new Child("e"), new Child("f"))));
List<FlatChild> flatChildren = new ArrayList<>();
for (Parent parent : parents) {
for (Child child : parent.children) {
flatChildren.add(new FlatChild(parent.name, child.name));
}
}
// does not work, cannot access p in the map function.
// final Stream<FlatChild> flatChildStream = parents.stream()
// .flatMap(p -> p.children.stream()).map(c -> new FlatChild(p.name, c.name));
System.out.println(flatChildren);
}
미리 도움을 청하십시오.
OMG는 내가 멍청한 놈처럼 감사를 느낀다. – wreipard