我正在从 2 个 CSV 文件读取城市和国家/地区数据,需要使用 Java Stream 合并结果(我需要保持与第一个结果相同的顺序)。我想过使用并行流或 ComletableFuture,但由于我需要第一次获取的结果作为参数传递给第二次获取,我不确定它们是否适合这种情况。
那么,为了从第一个查询中读取数据并将该查询的结果传递给第二个查询并获得结果,我应该在Java Stream中做什么?
以下是相关实体。我必须使用国家/地区代码值将它们关联起来。
假设我只需要以下城市的国家/地区名称。请记住,我需要保持与第一个结果相同的顺序。例如,如果结果是 [柏林、哥本哈格、巴黎],那么第二个结果应该与 [德国、丹麦、法国] 的顺序相同。
城市:
id | name | countryCode |
------------------------------
1 | Berlin | DE |
2 | Munich | DE |
3 | Köln | DE |
4 | Paris | FR |
5 | Kopenhag | DK |
...
国家:
id | name | code |
----------------------------------
100 | Germany | DE |
105 | France | FR |
108 | Denmark | DK |
...
以下是相关类:
public class City{
@CsvBindByPosition(position = 0)
private Integer id;
@CsvBindByPosition(position = 1)
private String name;
@CsvBindByPosition(position = 2)
private String countryCode;
// setters, getters, etc.
}
public class Country {
@CsvBindByPosition(position = 0)
private Integer id;
@CsvBindByPosition(position = 1)
private String name;
@CsvBindByPosition(position = 2)
private String code;
// setters, getters, etc.
}
您可以将数据与流合并,例如在 City 中添加一个国家名称:
List<Country> countries = // Your CSV Country lines
List<City> cities = // Your CSV City lines
cities.forEach(city -> city.setCountryName(countries.stream()
.filter(country -> country.getCode().equals(city.getCountryCode()))
.map(Country::getName).findAny().orElse(null)));