检查自定义列表是否包含项

时间:2017-08-10 08:43:06

标签: java

我有一个自定义列表,想检查它是否包含特殊项目。该列表填充了Rowlayout个对象。

public RowLayout(String content, int number) {
        this.content = content;
        this.number = number;
    }

现在我想检查我的List<Roalayout>是否包含content位置的特殊项目。我该怎么做?

仅仅询问.contains'是不行的。

我想检查的内容:

if (!List<RowLayout>.contains("insert here"){
//Do something
}

2 个答案:

答案 0 :(得分:7)

如果您可以修改课程RowLayout,只需覆盖hashCodeequals,即可获得您想要的任何相等内容。

如果你不能拥有java-8,可以这样做:

String content = ...
int number = ...

boolean isContained = yourList.stream()
        .filter(x -> x.getContent().equals(content))   
        .filter(x -> x.getNumber() == number)
        .findAny()
        .isPresent();

您显然可以从Optional findAny返回您感兴趣的实例。

答案 1 :(得分:2)

您只需覆盖List.contains equals即可正常工作。 List.contains在文档中说:

  

当且仅当此列表包含至少一个元素e时,返回true   如此(o == null?e == null: o.equals(e))。

equals的实施可能如下所示:

class RowLayout {
    private String content;
    private int number;

    public boolean equals(Object o)
    {
        if (!(o instanceof RowLayout)) return false;
        final RowLayout that = (RowLayout) o;
        return this.content.equals(that.content) && this.number == that.number;
    }
}

不要忘记also override hashCode,否则您的课程将无法在HashSetHashMap s等基于散列的结构中使用。

使用示例:

myList.contains(new RowLayout("Hello", 99));

另一种Java 8解决方案,如果您只关心内容而不关心这个数字,那就是:

boolean isContained = myList.stream() 
                            .map(RowLayout::getContent)
                            .anyMatch("some content");