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