2015-08-08 24 views
-1

我正在使用ImmutableList數據結構。過濾列表內容並在庫存描述屬性中返回包含該術語的所有元素的最佳方法是什麼?使用谷歌Guava包含文本的過濾器集合

+0

查看'FluentIterable'。 –

+0

FluentIterable.filter(),Iterables.filter() –

+0

Lists.filter(list,predicate) –

回答

0

如果你到Java 8,試試這個:

ImmutableList<String> immutableList = ImmutableList.of("s1", "s2"); 
List<Object> collect = immutableList.stream().filter(s -> s.endsWith("1")).collect(Collectors.toList()); 
// collect: [s1] 
0

我的解決辦法:你需要寫一個謂詞可以接受的說法。然後用它過濾你的收藏。

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的插件:1.2.1:EXEC(默認CLI)@應用程序 - -

項{說明=寫的...,標題=筆,價格= 0.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()」。