Java 在包含多个对象的列表中搜索对象';s属性
我有这个Java 在包含多个对象的列表中搜索对象';s属性,java,list,predicates,Java,List,Predicates,我有这个列表 MyObject如下所示: public class MyObject { String typeOfObject; Integer anInteger; Integer value; } 如何从列表中获取对象,其中typeOfObject=“objectA”和anInteger=1 我的目标是用MyObject的值设置许多变量 我查看了谓词,但似乎我只能基于一个属性来设置搜索条件?您必须重写equals()和hashcode()才能完成引用链接。您
列表
MyObject
如下所示:
public class MyObject {
String typeOfObject;
Integer anInteger;
Integer value;
}
如何从列表中获取对象,其中typeOfObject=“objectA”
和anInteger=1
我的目标是用MyObject
的值设置许多变量
我查看了谓词
,但似乎我只能基于一个属性来设置搜索条件?您必须重写equals()
和hashcode()
才能完成引用链接。您必须重写equals()
和hashcode())
要完成该操作,请参考链接以完成该操作。您必须覆盖equals()
和hashcode()
才能完成该参考链接。您必须覆盖equals()
和hashcode()
要完成这一点,请参阅链接以完成这一点。谓词可以做您想要做的事情,并且可以处理任意数量的属性。您只需要使用您想要测试的任何标准来实现evaluate()方法
public class MyPredicate implements Predicate {
private String testId;
private String otherId;
public MyPredicate(String testId,String otherId) {
this.testId = testId;
this.otherId = otherId;
}
public boolean evaluate( Object obj ) {
boolean match = false;
if( obj instanceof MyObject ) {
if( testId.equalsIgnoreCase( ((MyObject)obj).getId())
&& otherId.equalsIgnoreCase( ((MyObject)obj).getOtherId()) ) {
match = true;
}
}
return match;
}
}
因此,在您的具体案例中,评估方法如下所示:
public boolean evaluate( Object obj ) {
boolean match = false;
if( obj instanceof MyObject ) {
if( "objectA".equals( ((MyObject)obj).typeOfObject )
&& 1 == ((MyObject)obj).anInteger ) {
match = true;
}
}
return match;
}
谓词可以做您想要的事情,并且可以处理任意数量的属性。您只需要使用您想要测试的任何标准来实现evaluate()方法
public class MyPredicate implements Predicate {
private String testId;
private String otherId;
public MyPredicate(String testId,String otherId) {
this.testId = testId;
this.otherId = otherId;
}
public boolean evaluate( Object obj ) {
boolean match = false;
if( obj instanceof MyObject ) {
if( testId.equalsIgnoreCase( ((MyObject)obj).getId())
&& otherId.equalsIgnoreCase( ((MyObject)obj).getOtherId()) ) {
match = true;
}
}
return match;
}
}
因此,在您的具体案例中,评估方法如下所示:
public boolean evaluate( Object obj ) {
boolean match = false;
if( obj instanceof MyObject ) {
if( "objectA".equals( ((MyObject)obj).typeOfObject )
&& 1 == ((MyObject)obj).anInteger ) {
match = true;
}
}
return match;
}
谓词可以做您想要的事情,并且可以处理任意数量的属性。您只需要使用您想要测试的任何标准来实现evaluate()方法
public class MyPredicate implements Predicate {
private String testId;
private String otherId;
public MyPredicate(String testId,String otherId) {
this.testId = testId;
this.otherId = otherId;
}
public boolean evaluate( Object obj ) {
boolean match = false;
if( obj instanceof MyObject ) {
if( testId.equalsIgnoreCase( ((MyObject)obj).getId())
&& otherId.equalsIgnoreCase( ((MyObject)obj).getOtherId()) ) {
match = true;
}
}
return match;
}
}
因此,在您的具体案例中,评估方法如下所示:
public boolean evaluate( Object obj ) {
boolean match = false;
if( obj instanceof MyObject ) {
if( "objectA".equals( ((MyObject)obj).typeOfObject )
&& 1 == ((MyObject)obj).anInteger ) {
match = true;
}
}
return match;
}
谓词可以做您想要的事情,并且可以处理任意数量的属性。您只需要使用您想要测试的任何标准来实现evaluate()方法
public class MyPredicate implements Predicate {
private String testId;
private String otherId;
public MyPredicate(String testId,String otherId) {
this.testId = testId;
this.otherId = otherId;
}
public boolean evaluate( Object obj ) {
boolean match = false;
if( obj instanceof MyObject ) {
if( testId.equalsIgnoreCase( ((MyObject)obj).getId())
&& otherId.equalsIgnoreCase( ((MyObject)obj).getOtherId()) ) {
match = true;
}
}
return match;
}
}
因此,在您的具体案例中,评估方法如下所示:
public boolean evaluate( Object obj ) {
boolean match = false;
if( obj instanceof MyObject ) {
if( "objectA".equals( ((MyObject)obj).typeOfObject )
&& 1 == ((MyObject)obj).anInteger ) {
match = true;
}
}
return match;
}
如果您使用的是Java 8,则可以使用filter
获取与您的条件匹配的元素,例如使用lambda表达式。您还可以实现自定义的谓词
,并在过滤器中使用该谓词
List<MyObject> objects = Arrays.asList(
new MyObject("foo", 1, 42),
new MyObject("foo", 3, 23),
new MyObject("bar", 3, 42),
new MyObject("foo", 4, 42));
List<MyObject> filtered = objects.stream()
.filter(o -> o.typeOfObject.equals("foo") && o.value == 42)
.collect(Collectors.toList());
System.out.println(filtered);
如果您使用的是Java 8,则可以使用filter
获取与您的条件匹配的元素,例如使用lambda表达式。您还可以实现自定义的谓词
,并在过滤器中使用该谓词
List<MyObject> objects = Arrays.asList(
new MyObject("foo", 1, 42),
new MyObject("foo", 3, 23),
new MyObject("bar", 3, 42),
new MyObject("foo", 4, 42));
List<MyObject> filtered = objects.stream()
.filter(o -> o.typeOfObject.equals("foo") && o.value == 42)
.collect(Collectors.toList());
System.out.println(filtered);
如果您使用的是Java 8,则可以使用filter
获取与您的条件匹配的元素,例如使用lambda表达式。您还可以实现自定义的谓词
,并在过滤器中使用该谓词
List<MyObject> objects = Arrays.asList(
new MyObject("foo", 1, 42),
new MyObject("foo", 3, 23),
new MyObject("bar", 3, 42),
new MyObject("foo", 4, 42));
List<MyObject> filtered = objects.stream()
.filter(o -> o.typeOfObject.equals("foo") && o.value == 42)
.collect(Collectors.toList());
System.out.println(filtered);
如果您使用的是Java 8,则可以使用filter
获取与您的条件匹配的元素,例如使用lambda表达式。您还可以实现自定义的谓词
,并在过滤器中使用该谓词
List<MyObject> objects = Arrays.asList(
new MyObject("foo", 1, 42),
new MyObject("foo", 3, 23),
new MyObject("bar", 3, 42),
new MyObject("foo", 4, 42));
List<MyObject> filtered = objects.stream()
.filter(o -> o.typeOfObject.equals("foo") && o.value == 42)
.collect(Collectors.toList());
System.out.println(filtered);
如果谓词
适用于一个属性,那么链接谓词如何?还有,你到底试过什么,stream().filter(…)
?看看列表,得到你需要的东西怎么样?@tobias_k你有没有一个例子?这个例子可能会帮助你:这是关于番石榴的谓词
还是Java8的谓词
?如果谓词
适用于一个属性,链接谓词怎么样?还有,你到底试过什么,stream().filter(…)
?看看列表,得到你需要的东西怎么样?@tobias_k你有没有一个例子?这个例子可能会帮助你:这是关于番石榴的谓词
还是Java8的谓词
?如果谓词
适用于一个属性,链接谓词怎么样?还有,你到底试过什么,stream().filter(…)
?看看列表,得到你需要的东西怎么样?@tobias_k你有没有一个例子?这个例子可能会帮助你:这是关于番石榴的谓词
还是Java8的谓词
?如果谓词
适用于一个属性,链接谓词怎么样?另外,您到底尝试了什么,stream().filter(…)
?浏览列表并获取所需内容如何?@tobias_k您是否有一个示例?这一个可能会帮助您:这是关于Guava的谓词
还是Java8的谓词
?如果您希望避免每次获取元素时重复列表,那么这应该是正确且干净的方法。这如果您希望避免每次获取元素时都迭代列表,那么这应该是正确且干净的方法。如果您希望每次获取元素时都避免迭代列表,那么这应该是正确且干净的方法。如果您希望避免每次获取元素时都迭代列表,那么这应该是正确且干净的方法每次要获取元素时,都要创建列表。