检查两个List <e>是否有一些共同的元素

时间:2017-10-23 09:33:06

标签: java list contains

我正在尝试检查两个列表是否有一些共同的元素。我尝试了不同的方法,但它总是返回假。到现在我正在使用方法contains(Object):

private void setImportedAreaParameters(EList<EArea> exitingAreas) {
    EList<EPoint> importedAreaPoints = importedArea.getPoly().getPoints();
    for (EArea existingArea : exitingAreas){
        EList<EPoint> existingAreaPoints = existingArea.getPoly().getPoints();
        if(importedAreaPoints.contains(existingAreaPoints)){
            importedArea.setImportChoice(EImportAreaChoiceEnum.REPLACE);
        }
        else if (importedAreaPoints.size() >= POLYGON_POINTS_MAX_VALUE){
            importedArea.setImportChoice(EImportAreaChoiceEnum.TO_MANY_POINT);
        }
    }
}

EList importedAreaPoints和existingAreaPoints具有完全相同的元素。

importedAreaPoints [com.samu.domain.EPoint@45f5fd38 (lat: -5.580874037404866, lon: 35.94777225005756), com.samu.domain.EPoint@3dd4c25c (lat: -5.286985080169555, lon: 35.97486383222591), com.samu.domain.EPoint@18a80682 (lat: -5.286985080169555, lon: 35.71115171259456), com.samu.domain.EPoint@6c992dd3 (lat: -5.573099299909384, lon: 35.68508505352236), com.samu.domain.EPoint@6ef0145 (lat: -5.580874037404866, lon: 35.94777225005756)]

existingAreaPoints [com.samu.domain.EPoint@2d5caf46 (lat: -5.580874037404866, lon: 35.94777225005756), com.samu.domain.EPoint@2163354d (lat: -5.286985080169555, lon: 35.97486383222591), com.samu.domain.EPoint@2dd124cc (lat: -5.286985080169555, lon: 35.71115171259456), com.samu.domain.EPoint@66e5987d (lat: -5.573099299909384, lon: 35.68508505352236), com.samu.domain.EPoint@2e8b3d78 (lat: -5.580874037404866, lon: 35.94777225005756)]

EList从java.util.List扩展

4 个答案:

答案 0 :(得分:2)

你应该覆盖你的EPoint类的equals和hashCode,现在你正在为对象是相同的而加油。并且对象不一样,你可以在对象的地址上看到它@ 6ef0145 - &gt;这些都是不同的

https://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/

(对不起德语链接) http://www.tutego.de/javabuch/Java-ist-auch-eine-Insel/10/javainsel_08_003.html#dodtp848b6b5d-0c2d-464d-ac8e-4c765d194c9e

你应该比较long和lat是否相同

答案 1 :(得分:2)

寻找共同元素的过程基于两个或多个元素的比较。如果您定义了自己的类型(EArea,EPoint),则必须关注的equals和hashCode方法,因为这是您编写对象通用性逻辑的地方(更多信息:https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) 。当您覆盖这些方法时,您可以应用Collections框架提供的任何操作或实现您自己的解决方案。

答案 2 :(得分:0)

你有:

if(importedAreaPoints.contains(existingAreaPoints))
你应该

if(importedAreaPoints.contains(existingArea))

第一个是检查它是否包含列表objec而不是元素。

要检查的另一件事是.equals(Object 0)方法,以确保逻辑正确。

答案 3 :(得分:0)

如果您只是想检查公共元素是否存在,那么您可以使用retainAll(Collection<?> c)方法。考虑listAlphalistBeta是两个List<E>

List<T> commonItems = new ArrayList<>(listAlpha);
commonItems.retainAll(listBeta);

现在commonItems仅包含listAplhalistBeta共有的项目。