繁体   English   中英

使用Google Guava API进行过滤

[英]Filtering using Google Guava API

是否可以通过Google Guava API检查列表中的所有对象是否具有相同的属性?

此外,有没有一种方法可以将更多参数发送给Predicate?

假设我要使用从用户处获得的字符串来过滤所有对象,并且希望谓词在应用过滤器时使用此参数。

您可以如下创建自己的谓词:

class MyPredicate implements Predicate<MyObject> {
  private final String parameter;

  public MyPredicate(String parameter) {this.parameter = parameter;}

  boolean apply(MyObject input) {
  // apply predicate using parameter.
  }
}

然后,您可以执行以下操作进行过滤:

Iterables.filter(myIterable, new MyPredicate(myParameter));

您应该警惕,尽管这会执行惰性过滤器。

是否可以通过Google Guava API检查列表中的所有对象是否具有相同的属性?

是:

Foo first = list.get(0).getFoo();
boolean allSameFoo = Iterables.all(list, element -> element.getFoo().equals(first));

或者,如果您尚未使用Java 8:

final Foo first = list.get(0).getFoo();
boolean allSameFoo = Iterables.all(list, new Predicate<Bar> {
    @Override
    public boolean apply(Bar element) {
        return element.getFoo().equals(first);
    }
});

有没有办法将更多参数发送给谓词

是:

String s = getFromUser();
Iterables.filter(list, element -> element.getFoo().equals(s));

或者,如果您尚未使用Java 8:

final String s = getFromUser();
Iterables.filter(list, new Predicate<Bar> {
    @Override
    public boolean apply(Bar element) {
        return element.getFoo().equals(s);
    }
});

似乎您并不真正了解内部类的工作原理,因此您应该阅读有关它们的教程: https : //docs.oracle.com/javase/tutorial/java/javaOO/nested.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM