使用Google Guava过滤包含文本的集合

时间:2015-08-08 18:36:21

标签: java collections guava immutablelist

我使用的是ImmutableList数据结构。过滤列表内容的最佳方法是什么,并在广告资源的description属性中返回包含该字词的所有元素。

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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);
    }

}

Method接受一个参数并转换谓词

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 ---

项目{description =要写...,title = Pen,price = 0.0,count = 0}

答案 2 :(得分: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链接过滤器,转换(等)。如果你想得到一个列表或一组,只需添加&#34; .toList()&#34;或&#34; .toSet()&#34;最后。