从Java中其他类的对象列表中获取对象列表
我想使用现有列表中的某些属性,从现有对象列表生成一个对象列表 比如说, 我有从Java中其他类的对象列表中获取对象列表,java,list,object,lambda,java-8,Java,List,Object,Lambda,Java 8,我想使用现有列表中的某些属性,从现有对象列表生成一个对象列表 比如说, 我有汽车清单 public Class Car { Integer carId; String carName; Integer engineId; String engineName; Double engineCapacity; } Class Engine { Integer engineId; String engineName; Double engineCapacity; } 我想从现有的汽车列表中创建Lis
汽车清单
public Class Car {
Integer carId;
String carName;
Integer engineId;
String engineName;
Double engineCapacity;
}
Class Engine {
Integer engineId;
String engineName;
Double engineCapacity;
}
我想从现有的汽车列表中创建List engines
,这样对于每个汽车对象,列表中将有一个发动机对象,所有属性都使用汽车列表填充。使用Java8流/Lambda是否可以实现这一点
使用Java8流是否可以做到这一点
当然。您只需将.map
每辆汽车
映射到发动机
。比如:
List<Engine> = cars.stream()
.map(x -> new Engine(x.getEngineId(), x.getEngineName(), x.getEngineCapacity())
.collect(Collectors.toList());
List=cars.stream()
.map(x->新引擎(x.getEngineId(),x.getEngineName(),x.getEngineCapacity())
.collect(Collectors.toList());
当然,您必须为
引擎
类提供引擎(Integer engineId、String engineName、Double engineCapacity)
构造函数。实际上,将汽车列表映射到它们的引擎列表就足够了,因为我想它们已经被填充了
List<Engine> = cars.stream().map(Car::getEngine).collect(Collectors.toList());
List=cars.stream().map(Car::getEngine).collect(collector.toList());
您应该知道,这些引擎是对汽车对象中引擎的引用。因此,通过汽车更改它们的属性也应该反映在引擎列表中
如果您想拥有不同的引擎对象(但与汽车中的引擎具有相同的值),您应该尝试kocko的答案。您可以使用前面描述的流(这是一个优雅的解决方案)
List=cars.stream().map(Car::getEngine).collect(collector.toList());
或者您只需创建一个新列表,在旧列表上迭代并将元素添加到新列表中:
List<Engine> l = new LinkedList();
for (Car car : cars) {
l.add(car.getEngine());
}
List l=newlinkedlist();
用于(汽车:汽车){
l、 添加(car.getEngine());
}
List<Engine> l = new LinkedList();
for (Car car : cars) {
l.add(car.getEngine());
}