0

我正在使用 ImmutableList 数据结构。过滤列表内容并在清单的描述属性中返回包含该术语的所有元素的最佳方法是什么。

4

3 回答 3

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-plugin:1.2.1:exec (default-cli) @App ---

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

于 2015-08-10T18:50:26.080 回答
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()”。

于 2015-08-10T19:02:01.370 回答
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]
于 2015-08-10T18:37:53.780 回答