gpt4 book ai didi

java - Guava - 按属性过滤并包含

转载 作者:行者123 更新时间:2023-12-02 05:04:21 25 4
gpt4 key购买 nike

我正在尝试按对象中的多个属性进行过滤,在我的例子中是 CarObj:

    List<String> colorList = (List<String>)filterCriteria.get("Color");
List<String> makeList = (List<String>)filterCriteria.get("Make");
List<String> rimSizeList = (List<String>)filterCriteria.get("RimSize");

Predicate<String> predColor = Predicates.in(ImmutableSet.copyOf(colorList));
Predicate<CarObj> predColor2 = Predicates.compose(predColor ,[????] );

Predicate<String> predMakeList = Predicates.in(ImmutableSet.copyOf(makeList));
Predicate<CarObj> predMakeList2 = Predicates.compose(predMakeList, [????] );

Predicate<String> predRimSize = Predicates.in(ImmutableSet.copyOf(rimSizeList));
Predicate<CarObj> predRimSize2 = Predicates.compose(predRimSize, [????] );

Collection<CarObj> filtered = FluentIterable.from(mAllCars)
.filter(predColor2)
.filter(predMakeList2)
.filter(predRimSize2)
.toList();

如何放入逻辑来处理 StartsWith 或 Contains 功能?因此,如果用户输入“Silver”,并且在我的 CarObjs 集合中,Model 属性具有“Silverado”、“Silverline”、“Silverpig”、“Tacoma”、“Accord”等...

我想找到一种过滤方法,以便返回以“Silver”开头的汽车。它将返回所有型号为 Silverado、Silverline 或 Silverpig 且满足其他 3 个过滤器(颜色、轮辋尺寸和品牌)的汽车

最佳答案

在 Java 8 中,你可以直接写

Predicate<CarObj> predColor2 = Predicates.compose(predColor , CarObj::getColor);

但否则你就必须写

Predicate<CarObj> predColor2 = Predicates.compose(predColor , 
new Function<CarObj, String>() {
@Override public String apply(CarObj car) {
return car.getColor();
}
});

如果您想按例如过滤startsWith,那么不要使用Predicates.compose,而是写

final Set<String> makes = ImmutableSet.copyOf(makeList);
Predicate<CarObj> predMake2 = new Predicate<CarObj>() {
@Override public boolean apply(CarObj car) {
for (String make : makes) {
if (car.getMake().startsWith(make)) {
return true;
}
}
return false;
}
};

关于java - Guava - 按属性过滤并包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930029/

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