Java 在集合中展平集合以获得单个列表<&燃气轮机;
我对使用Java非常陌生,并尝试使用map将集合中的集合展平,以获取单个列表。然而,我似乎无法让它工作。为了重现这一点,我创建了一个非常简单的例子来说明我正在尝试做的事情。以下是我到目前为止的情况: ClassAJava 在集合中展平集合以获得单个列表<&燃气轮机;,java,list,lambda,java-8,java-stream,Java,List,Lambda,Java 8,Java Stream,我对使用Java非常陌生,并尝试使用map将集合中的集合展平,以获取单个列表。然而,我似乎无法让它工作。为了重现这一点,我创建了一个非常简单的例子来说明我正在尝试做的事情。以下是我到目前为止的情况: ClassA import java.util.List; public class ClassA { private List<ClassB> listOfClassB; public ClassA(List<ClassB> listOfClassB)
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;
}
}
Main
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());
}
}
公共类主{
公共静态void main(字符串[]args){
B类第一类=新B类(“A”);
类别B第二类=新类别B(“B”);
B类第三类=新B类(“C”);
类别B第四类=新类别B(“D”);
ArrayList firstClassList=新建ArrayList();
ArrayList secondClassList=新建ArrayList();
firstClassList.add(firstClass);
第一类列表。添加(第二类);
添加(第三类);
第二类列表。添加(第四类);
ArrayList类=新的ArrayList();
添加(新的ClassA(firstClassList));
添加(新类A(第二类列表));
List collect=classes.stream().map(c->c.getListOfClassB().stream().map(ClassB::getItem).collect(Collectors.toList()).collect(Collectors.toList());
}
}
正如您在底部看到的,我可以得到列表
,但我希望得到的是类B中项目的列表
。我试着用平面图来做这件事,但我无法让它工作,我正在寻找一些指导
提前感谢。下面是一个工作正常的平面地图示例:
classes.stream().flatMap(aclass -> aclass.getListOfClassB().stream())
.forEach(b -> System.out.println("Class B Item Name : "+b.getItem()));
它给出以下输出:
Class B Item Name : A
Class B Item Name : B
Class B Item Name : C
Class B Item Name : D
为了得到确切的答案:
List<String> collect2 = classes.stream().flatMap(aclass -> aclass.getListOfClassB().stream())
.map(b -> b.getItem())
.collect(Collectors.toList());
这将返回
ClassB
的字符串列表:
List<String> listB = classes.stream().flatMap(a-> a.getListOfClassB().stream())
.map(ClassB::getItem)
.collect(Collectors.toList());
List listB=classes.stream().flatMap(a->a.getListOfClassB().stream())
.map(ClassB::getItem)
.collect(Collectors.toList());
在这里,我们使用一个
flatMap
,然后映射ClassB
的getItem
,最后使用.collect(…)
返回列表。对于.map
的方法参考将更加清晰:)谢谢!我没有在平面图中包括.stream()
collect2 : [A, B, C, D]
List<String> listB = classes.stream().flatMap(a-> a.getListOfClassB().stream())
.map(ClassB::getItem)
.collect(Collectors.toList());