Ser*_*uss 4 java lambda list java-8 java-stream
我很擅长使用Java,并尝试使用map来集合集合中的集合来尝试获取单个List.但是我似乎无法让这个工作.为了重现这一点,我创造了一个很简单的例子,说明我正在尝试做什么.这是我到目前为止:
ClassA的
import java.util.List;
public class ClassA {
private List<ClassB> listOfClassB;
public ClassA(List<ClassB> listOfClassB) {
this.listOfClassB = listOfClassB;
}
public List<ClassB> getListOfClassB() {
return this.listOfClassB;
}
}
Run Code Online (Sandbox Code Playgroud)
ClassB的
public class ClassB {
private String item;
public ClassB(String item) {
this.item = item;
}
public String getItem() {
return item;
}
}
Run Code Online (Sandbox Code Playgroud)
主要
public class Main {
public static void main(String[] args) {
ClassB firstClass = new ClassB("A");
ClassB secondClass = new ClassB("B");
ClassB thirdClass = new ClassB("C");
ClassB fourthClass = new ClassB("D");
ArrayList<ClassB> firstClassList = new ArrayList<>();
ArrayList<ClassB> secondClassList = new ArrayList<>();
firstClassList.add(firstClass);
firstClassList.add(secondClass);
secondClassList.add(thirdClass);
secondClassList.add(fourthClass);
ArrayList<ClassA> classes = new ArrayList<>();
classes.add(new ClassA(firstClassList));
classes.add(new ClassA(secondClassList));
List<List<String>> collect = classes.stream().map(c -> c.getListOfClassB().stream().map(ClassB::getItem).collect(Collectors.toList())).collect(Collectors.toList());
}
}
Run Code Online (Sandbox Code Playgroud)
正如你在底部看到的那样,我能够得到List<List<String>>
但是我想要得到的是List<String>
ClassB中的一个项目.我尝试过使用平面图,但是我无法使用它,并且正在寻找一些指导.
提前致谢.
这是flatmap示例,它可以正常工作:
classes.stream().flatMap(aclass -> aclass.getListOfClassB().stream())
.forEach(b -> System.out.println("Class B Item Name : "+b.getItem()));
Run Code Online (Sandbox Code Playgroud)
它给出了以下输出:
Class B Item Name : A
Class B Item Name : B
Class B Item Name : C
Class B Item Name : D
Run Code Online (Sandbox Code Playgroud)
并得到确切的答案:
List<String> collect2 = classes.stream().flatMap(aclass -> aclass.getListOfClassB().stream())
.map(b -> b.getItem())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
它给我一个列表如下:
collect2 : [A, B, C, D]
Run Code Online (Sandbox Code Playgroud)
这将返回以下字符串列表ClassB
:
List<String> listB = classes.stream().flatMap(a-> a.getListOfClassB().stream())
.map(ClassB::getItem)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
在这里,我们使用 a flatMap
,然后映射getItem
of ClassB
,最后使用.collect(...)
返回列表。
归档时间: |
|
查看次数: |
85 次 |
最近记录: |