java - 是否可以加入两个 Java 8 流?
问题描述
我想知道我是否可以加入两个预先排序的流(一次通过)。例如,如果我有以下 Java 类:
public class Person { // constructor & getters ommitted
private String name;
private int salary;
private List<Car> cars;
public void addCar(Car c) { cars.add(c); }
}
public class Car { // constructor & getters ommitted
private String owner;
private String brand;
}
我有预先排序的流,如:
Stream<Person> clients = Arrays.asList(
new Person("Anne", 500),
new Person("Johnny", 340)
).stream();
Stream<Car> cars = Arrays.asList(
new Car("Johnny", "Mazda"),
new Car("Johnny", "Fiat"),
new Car("Mary", "Volvo")
).stream();
我想addCar()
用“马自达”和“菲亚特”向约翰尼申请。安妮没有车,玛丽也不是客户。
是否可以通过单次流加入两个流?
我已经看到过多次遍历一条流的解决方案,但由于它们是预先订购的,我想可能有机会一次性完成。
编辑:操作的预期结果是调用addCar()
“Johnny”两次:一次是“Mazda”,一次是“Fiat”。
解决方案
恐怕无法使用 Stream API 有效地解决此任务。但是你仍然可以使用迭代器来做到这一点。
public static void addCars(Stream<Person> clients, Stream<Car> cars) {
Iterator<Person> clientsIt = clients.iterator();
Iterator<Car> carsIt = cars.iterator();
Person client = null;
while (carsIt.hasNext()) {
Car car = carsIt.next();
while (client == null || !client.getName().equals(car.getOwner())) {
if(!clientsIt.hasNext()) return;
client = clientsIt.next();
}
client.addCar(car);
}
}
推荐阅读
- sql-server - ms sql SQL 生成
- css - CSS 网格排序
- c# - azure-pipelines.yml 构建 UWP 混合 C# C++ 项目
- html - div的关系 - 父母/孩子/独立
- tortoisegit - TortoiseGit 保存对话框位置和大小的地方
- fortran - Fortran 中具有可分配数组和重载运算符的派生类型
- asterisk - 播放 IVR 时从菜单中选择星号
- python - Python将Qt ui与信号分开
- redhat-datavirt - 是否有连接 teiid 中所有列的功能?
- android - 如何设置 DatePickerDialog 的标题?