第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

刪除列表 Java 中的重復(fù)對(duì)象

刪除列表 Java 中的重復(fù)對(duì)象

九州編程 2021-11-11 14:21:05
我有課:class MyClass {    String s1;    String s2;}列表對(duì)象包括[{s1: "a", s2: "b"}, {s1: "a", s2: "c"}, {s1: "a", s2: "b"}, {s1: "a", s2:“d”}]我想刪除對(duì)象重復(fù)的 2 個(gè)屬性 s1 和 s2預(yù)期結(jié)果:[{s1: "a", s2: "b"}, {s1: "a", s2: "c"}, {s1: "a", s2: "d"}]如果能用Java 8更好幫我 :(
查看完整描述

3 回答

?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

首先像這樣覆蓋equals和hashCode方法MyClass,


@Override

public int hashCode() {

    return 31 * s1.hashCode() + s2.hashCode();

}


@Override

public boolean equals(Object obj) {

    return obj instanceof MyClass && ((MyClass) obj).getS1().equals(getS1())

            && ((MyClass) obj).getS2().equals(getS2());

}

那么消除重復(fù)的最簡(jiǎn)單方法是使用Set.


new HashSet<>(instances)


查看完整回答
反對(duì) 回復(fù) 2021-11-11
?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

實(shí)現(xiàn) hashcode() 或 equals() 不是必須的。這是一種方法:


Map<List<String>, MyClass> map = new HashMap<>();

List<MyClass> distinctList = myCollection.stream()

    .collect(Collectors.toMap(c -> Arrays.asList(c.s1, c.s2), Function.identity(), (x,y)->x))

    .values()

    .stream()

    .collect(Collectors.toList());


查看完整回答
反對(duì) 回復(fù) 2021-11-11
?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

您需要覆蓋equal和hash code函數(shù),然后使用java 8的Streaming API的distinct函數(shù)。


import java.util.ArrayList;

import java.util.List;

import java.util.Objects;

import java.util.stream.Collectors;


public class MyClass {


  private String s1;

  private String s2;


  public MyClass() {

  }


  public MyClass(String s1, String s2) {

    this.s1 = s1;

    this.s2 = s2;

  }


  public String getS1() {

    return s1;

  }


  public MyClass setS1(String s1) {

    this.s1 = s1;

    return this;

  }


  public String getS2() {

    return s2;

  }


  public MyClass setS2(String s2) {

    this.s2 = s2;

    return this;

  }


  @Override

  public boolean equals(Object o) {

    if (this == o) {

      return true;

    }

    if (o == null || getClass() != o.getClass()) {

      return false;

    }

    MyClass myClass = (MyClass) o;

    return Objects.equals(getS1(), myClass.getS1()) &&

        Objects.equals(getS2(), myClass.getS2());

  }


  @Override

  public int hashCode() {

    return Objects.hash(getS1(), getS2());

  }


  @Override

  public String toString() {

    return "MyClass{" + "s1='" + s1 + '\'' + ", s2='" + s2 + '\'' + '}';

  }


  public static void main(String[] args) {

    List<MyClass> list = new ArrayList<>();

    list.add(new MyClass("a", "b"));

    list.add(new MyClass("a", "c"));

    list.add(new MyClass("a", "b"));

    list.add(new MyClass("a", "d"));

    System.out.println("Original size is : " + list.size()); // Size is 4

    list.forEach(System.out::println);

    //Now remove duplicate

    List<MyClass> expected = list.stream().distinct().collect(Collectors.toList());

    System.out.println(

        "After remove duplication size is : " + expected.size()); // Here is your expected result size is 3

    expected.forEach(System.out::println);

  }

}

這是輸出:


原尺寸為:4


我的類{s1='a', s2='b'}


我的類{s1='a', s2='c'}


我的類{s1='a', s2='b'}


我的類{s1='a', s2='d'}


刪除重復(fù)后大小為:3


我的類{s1='a', s2='b'}


我的類{s1='a', s2='c'}


我的類{s1='a', s2='d'}


查看完整回答
反對(duì) 回復(fù) 2021-11-11
  • 3 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)