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的
谓词
?如果您希望避免每次获取元素时重复列表,那么这应该是正确且干净的方法。这如果您希望避免每次获取元素时都迭代列表,那么这应该是正确且干净的方法。如果您希望每次获取元素时都避免迭代列表,那么这应该是正确且干净的方法。如果您希望避免每次获取元素时都迭代列表,那么这应该是正确且干净的方法每次要获取元素时,都要创建列表。