gpt4 book ai didi

java - 基于另一个列表的 1 个列表的流过滤器

转载 作者:行者123 更新时间:2023-12-01 06:49:45 27 4
gpt4 key购买 nike

我在此论坛和谷歌中搜索后发布了我的查询,但无法解决相同的问题。
例如:Link1 Link2 Link3

我正在尝试根据列表 1 中的值过滤列表 2(多列)。

List1:
- [Datsun]
- [Volvo]
- [BMW]
- [Mercedes]

List2:
- [1-Jun-1995, Audi, 25.3, 500.4, 300]
- [7-Apr-1996, BMW, 35.3, 250.2, 500]
- [3-May-1996, Porsche, 45.3, 750.8, 200]
- [2-Nov-1998, Volvo, 75.3, 150.2, 100]
- [7-Dec-1999, BMW, 95.3, 850.2, 900]

expected o/p:
- [7-Apr-1996, BMW, 35.3, 250.2, 500]
- [2-Nov-1998, Volvo, 75.3, 150.2, 100]
- [7-Dec-1999, BMW, 95.3, 850.2, 900]

代码
// List 1 in above eg
List<dataCarName> listCarName = new ArrayList<>();
// List 2 in above eg
List<dataCar> listCar = new ArrayList<>();

// Values to the 2 lists are populated from excel

List<dataCar> listOutput = listCar.stream().filter(e -> e.getName().contains("BMW")).collect(Collectors.toList());

在上面的代码中,如果我提供了可以过滤的特定值,但不确定如何检查列表 2 中的汽车名称是否存在于列表 1 中。

希望我面临的问题很清楚,等待指导(我对 Java 还是比较新的,因此如果上述查询非常基本,请原谅)。

编辑
我相信上面提供的 link-3 应该可以解决,但在我的情况下它不起作用。也许是因为 list-1 中的值填充为
org.gradle04.Main.Cars.dataCarName@4148db48 .. 等
只有当我通过调用 getName 方法在 List 1 上执行 forEach 时,我才能以人类可读的格式获取值。

最佳答案

不清楚你为什么有 List<DataCarName>排在第一位而不是 List/Set<String> .

您必须提供的谓词必须检查相应数据汽车实例的名称是否在列表中。
e -> e.getName().contains("BMW")只会检查数据车的名称是否包含不是您想要的 BMW。你的第一次尝试可能是

e -> listCarName.contains(e.getName())

但自从 listCarNameList<DataCarName>e.getName()一个字符串(我认为),结果你会得到一个空列表。

您拥有的第一个选项是更改谓词,以便您从数据汽车名称列表中获取流,将它们映射到它们的字符串表示形式,并检查这些名称中的任何一个是否与您当前正在过滤的当前数据汽车实例的名称相对应:
List<DataCar> listOutput =
listCar.stream()
.filter(e -> listCarName.stream().map(DataCarName::getName).anyMatch(name -> name.equals(e.getName())))
.collect(Collectors.toList());

现在这是非常昂贵的,因为您为数据汽车流管道中的每个实例创建一个流。更好的方法是构建一个 Set<String>在前面加上汽车的名字,然后简单地使用 contains作为这个集合的谓词:
Set<String> carNames = 
listCarName.stream()
.map(DataCarName::getName)
.collect(Collectors.toSet());

List<DataCar> listOutput =
listCar.stream()
.filter(e -> carNames.contains(e.getName()))
.collect(Collectors.toList());

关于java - 基于另一个列表的 1 个列表的流过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com