Java 使用lambda创建包含空对象的ArrayList
我想使用streams创建一个包含id和空列表的对象的ArrayList。我尝试了不同的方法,但没有成功。如果有人能给我一些点击,将会对我有很大帮助。 下面是我想转换为Java 8的代码:Java 使用lambda创建包含空对象的ArrayList,java,arraylist,lambda,java-8,java-stream,Java,Arraylist,Lambda,Java 8,Java Stream,我想使用streams创建一个包含id和空列表的对象的ArrayList。我尝试了不同的方法,但没有成功。如果有人能给我一些点击,将会对我有很大帮助。 下面是我想转换为Java 8的代码: this.registers = new ArrayList<Supplier>(); for (int i = 0; i < this.numberOfSuppliers; i++) { Supplier supplier = new Supplier();
this.registers = new ArrayList<Supplier>();
for (int i = 0; i < this.numberOfSuppliers; i++) {
Supplier supplier = new Supplier();
supplier.setSupplierNumber(i);
supplier.setMaterials(new ArrayList<Warehouse>());
this.registers.add(supplier);
}
this.registers=new ArrayList();
对于(int i=0;i
提前谢谢。这不是我喜欢的方法(我认为for循环在这里很好),但在streams中,您可以这样做:
this.registers = IntStream.range(0, this.numberOfSuppliers)
.map(i -> {
Supplier supplier = new Supplier();
supplier.setSupplierNumber(i);
supplier.setMaterials(new ArrayList<Warehouse>());
return supplier;
})
.collect(Collectors.toList());
this.registers=IntStream.range(0,this.numberOfSuppliers)
.map(i->{
供应商=新供应商();
供应商。设置供应商编号(i);
supplier.setMaterials(新ArrayList());
退货供应商;
})
.collect(Collectors.toList());
您可以考虑将一个构造函数添加到供应商,将ID作为参数,并初始化材料列表,这样就不必暴露SETER。然后,使用循环或流的解决方案变得简单得多
public void buildSuppliersWithLoop()
{
ArrayList<Supplier> registers = new ArrayList<>()
int numberOfSuppliers = 100;
for (int i = 0; i < numberOfSuppliers; i++)
{
registers.add(new Supplier(i));
}
}
public void buildSuppliersWithStream()
{
int numberOfSuppliers = 100;
List<Supplier> registers = IntStream.range(0, numberOfSuppliers)
.mapToObj(Supplier::new)
.collect(Collectors.toList());
}
public class Supplier
{
private int number;
private List<Warehouse> materials;
public Supplier(int number)
{
this.number = number;
this.materials = new ArrayList<>();
}
}
public class Warehouse
{
}
public void buildSuppliersWithLoop()
{
ArrayList寄存器=新的ArrayList()
int numberOfSuppliers=100;
对于(int i=0;i
警告:这将创建一个列表
,而不是数组列表
。如果需要ArrayList
,请将Collectors.toList()
替换为Collectors.toCollection(ArrayList::new)
。我认为您需要在此处使用mapToObj,而不是map,因为map返回一个IntStream,不是流。您还可以将供应商对象的创建提取到其他方法以提高可读性。除非这只是流中的练习,否则不要转换为流。for
循环的性能很好。通过转换为流,您将一无所获,甚至连代码的清晰性和简单性都得不到。在我看来,它实际上不那么干净/简单(参见)。是的,这只是一个练习。但谢谢你的建议:)