我正在尝试根据另一个列表中存在的值筛选一个列表。我已经经历了其他类似的问题,并试图利用这些来实现我的目标,但无法做到这一点。
列表1由类CarModel
(L1)的对象组成
public class CarModel {
private String year;
private String model;
}
列表2由类Cardata
(L2)的对象组成
public class CarData {
private OffsetDateTime date;
private List<CarDetails> carDetails;
}
public class CarDetails {
private String owner;
private List<Cars> cars = null;
}
public class Car {
private String modelName;
private String dealership;
}
carModel1 = { year: 2019, model: BMW-500-7S-150-Z100 }
carModel2 = { year: 2019, model: MERCEDES-700-7S-350-Z100 }
carModel3 = { year: 2018, model: AUDI-100-Q6-350-Z100 }
CarData = {
date: 2-6-2021,
carDetails: [
{
owner: John,
cars: [ {
modelName: BMW-500-7S-*-Z100,
dealership: Nevada
},
{
modelName:MERCEDES-700-7S-*-Z100,
dealership: Daytona
}
]
}
]
}
因此,筛选后,列表1将不包含C3
,因为该模型与Cardata
中的modelname
不匹配。
我怎么能这么做?
您可以首先将嵌套列表扁平化,并从列表中提取汽车型号的名称作为hashset
。:
Set<String> names = carDataList.stream()
.flatMap(cd -> cd.getCarDetails().stream())
.flatMap(det -> det.getCars().stream())
.map(Car::getModelName())
.collect(Collectors.toCollection(HashSet::new));
现在可以使用此集的contains()
方法筛选列表
:
models.stream()
.filter(model -> names.contains(model.getModel()))
.collect(Collectors.toList())
.forEach(m -> System.out.println(m.getModel()));
如果只想要列表中的名字:
models.stream()
.map(CarModel::getModel)
.filter(names::contains)
.collect(Collectors.toList())
.forEach(System.out::println);
我使用的是spring,我用定义了bean。它是一个包含对象的列表。 这是我的数据privider类: 在configuration类中,我从创建了-它可以工作。 在服务中,我想从列表中修改一个对象,该对象与令牌字符串匹配,并且已将设置为。 这条小溪运行良好。现在,当有人为已确认的对象调用方法两次时,我希望抛出。我怎么能用这条小溪做到这一点呢?我可以将放在哪里? 编辑: 我现在的解决方案。我使用而
问题内容: 我有一个说“销售”的对象列表。我只需要其产品与另一个列表(例如saleProductList)中的对象匹配的Sales对象。 除了循环以外,还有没有更好的方法可以做到这一点。 问题答案: 如果您已经在使用Google的Guava库,则它具有Collections2.filter()方法,该方法将仅返回集合中与给定Predicate匹配的项。 但是,这是否能回答您的问题取决于您避免循环的
我需要过滤一个列表
我有一个带有键的HashMap,值是字符串。我想通过以字符串“locationid”开头的键值过滤HashMap,并将键中的值返回到字符串数组列表中。HashMap的填充方式如下: 我需要arraylist中的ORG_Id值。 我找不到可以将值放入字符串列表的位置。编译错误是它不识别values()方法。 更新还尝试将筛选后的Hashmap放入另一个Hashmap中,如下所示: 但得到的编译错误是
我有一个对象的arraylist,其中有一个字段“name”,还有一个名称列表。我必须从列表中选择包含任何名称的所有对象。如何在java中最有效地实现这一点。任何代码片段都将受到高度赞赏。 例子: 让类名为 A由id、name、subject等字段组成。 那么让我们假设我有一个列表 所以假设我有第二个列表 因此,我只想从objectsA列表中选择那些名称字段由名称列表中的名称组成的对象,也就是说,
假设我们有一个三维的物体列表。 假设我想过滤“l5”,这样如果最里面的列表中的任何元素是奇数,那么整个列表都应该被删除,如果这使得第二级列表为空,那么作为回报应该被删除。 因此,对于给定的示例,在过滤之前,如果: 过滤后,它应该是: 如何使用Java中的流来实现这一点?