[英]Filter collections containing text using Google Guava
我正在使用ImmutableList数据结构。 什么是过滤列表内容并返回清单的description属性中包含该术语的所有元素的最佳方法。
如果您使用Java 8,请尝试以下操作:
ImmutableList<String> immutableList = ImmutableList.of("s1", "s2");
List<Object> collect = immutableList.stream().filter(s -> s.endsWith("1")).collect(Collectors.toList());
// collect: [s1]
我的解决方案:您需要编写一个可以接受参数的谓词。 然后使用它过滤您的收藏。
public static void main(String args[]) {
Item i1 = new Item("Pen", "To write...");
Item i2 = new Item("Phone","to call someone..." );
List<Item> items = new ArrayList<Item>();
items.add(i2);
items.add(i1);
Collection<Item> result = Collections2.filter(items, filterDescription("To write..."));
for(Item item : result){
System.out.println(item);
}
}
方法接受一个参数并变成一个谓词
public static Predicate<Item> filterDescription(final String desciption){
return new Predicate<Item>() {
@Override
public boolean apply(Item input) {
return input.getDescription() != null && input.getDescription().contains(desciption);
}
};
}
结果:
--- exec-maven-plugin:1.2.1:exec(default-cli)@ App ---
项目{说明=写...,标题=笔,价格= 0.0,数量= 0}
使用FluentIterable:
final String description = "search string";
final Iterable<Item> filtered = FluentIterable.from(unfiltered)
.filter(new Predicate<Item>() {
@Override
public boolean apply(final Item input) {
return input.getDescription().contains(desciption);
}
});
您可以使用FluentIterable链接过滤器,变换(等)。 如果要以列表或集合结尾,只需在末尾添加“ .toList()”或“ .toSet()”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.