[英]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.