加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java interscect,union,join,带谓词的不同列表

发布时间:2020-12-15 00:48:59 所属栏目:Java 来源:网络整理
导读:您好我有2个包含相同对象的列表.我想通过使用谓词执行任何操作,如intercesct,union,distinct,因为我无法使用equals来进行比较. 例: class Car{ public String id; public String color; public int hashcode(){ //id field is used for hashcode } public b
您好我有2个包含相同对象的列表.我想通过使用谓词执行任何操作,如intercesct,union,distinct,因为我无法使用equals来进行比较.

例:

class Car{
  public String id;
  public String color;
  public int hashcode(){
    //id field is used for hashcode
  }
  public boolean equals(){
    //id field is used for equals
  }
}

现在我有两个汽车清单.我需要在此列表中找到重复项,但不能仅通过颜色找到id.

List<Car> carList1 = new ArrayList(){ new Car(1,blue),new Car(2,green)};
List<Car> carList2 = new ArrayList(){ new Car(1,silver),new Car(4,green)};

我需要从carList1找到第二个对象(新车(2,绿色))

列出类似的东西

Collection.intersect(carList1,carList2,comparator).

在C#中我会用它来LINQ.

解决方法

您可以使用 Guava进行类似的思考.

1)intersect是对集合的操作,而不是列表上的操作.所以你应该像他们一样构建它们

final Set<Car> first = ImmutableSet.of( new Car(1,"blue"),"green") );

或者,如果你需要特殊的比较器(提到谓词)

final Set<Car> second = newTreeSet( new Comparator<Car>(){
    public int compare( final Car o1,final Car o2 ){
        return o1.getColor().compare( o2.getColor() );  //return 0 when predicate return true
    }
} );
second.add( new Car(1,"green")  );

UPD:您应该只使用一种方法来构建两个集合.

比呼叫交叉点

final Set<Car> intersection = Sets.intersection( first,second );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读