簡體   English   中英

使用Google Guava過濾包含文本的集合

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM