Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java中其他类的对象列表中获取对象列表_Java_List_Object_Lambda_Java 8 - Fatal编程技术网

从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());
}