有没有办法检查列表中的所有对象是否与Google Guava API具有相同的属性?
此外,有没有办法向Predicate发送更多参数?
让我说我想用我从用户那里得到的字符串过滤掉所有对象, 我希望Predicate在应用过滤器时使用此参数。
答案 0 :(得分:2)
您可以按如下方式创建自己的谓词:
interface IMyScheduler
{
void Every(TimeSpan interval, Action action);
}
//your real implementation
class MySheduler: IMyScheduler
{
readonly Schedule _schedule;
public MySheduler(Schedule schedule)
{
_schedule = schedule;
}
public void Every(TimeSpan interval, Action action)
{
_schedule.Every(TimeSpan.FromSeconds(5), () => { });
}
}
//fake for the testing
class FakeSheduler: IMyScheduler
{
public bool WasCalled { get; set; }
public void Every(TimeSpan interval, Action action)
{
WasCalled = true;
}
}
然后您可以执行以下操作进行过滤:
class MyPredicate implements Predicate<MyObject> {
private final String parameter;
public MyPredicate(String parameter) {this.parameter = parameter;}
boolean apply(MyObject input) {
// apply predicate using parameter.
}
}
你应该小心,但这会执行一个惰性过滤器。
答案 1 :(得分:1)
有没有办法检查列表中的所有对象是否与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);
}
});
有没有办法向Predicate发送更多参数
是:
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。