2015-05-20 2 views
1

Это мой кодМожно ли удалить дубликаты из списка, содержащего элементы пользовательского типа?

package com.dto; 

public class OtherBrands { 

    private String otherbrandsname ; 
    public String getOtherbrandsname() { 
     return otherbrandsname; 
    } 
    public void setOtherbrandsname(String otherbrandsname) { 
     this.otherbrandsname = otherbrandsname; 
    } 
    public String getDealerBrandQty() { 
     return dealerBrandQty; 
    } 
    public void setDealerBrandQty(String dealerBrandQty) { 
     this.dealerBrandQty = dealerBrandQty; 
    } 
    private String dealerBrandQty ; 

} 

import java.util.ArrayList; 
import java.util.List; 
import com.dto.OtherBrands; 

public class Test { 
    public static void main(String args[]) 
    { 
     List <OtherBrands> otherBrandsList = new ArrayList <OtherBrands>(); 
     for (int k = 0; k < 3; k++) { 
      OtherBrands otherbrands = new OtherBrands(); 
      String otherbrandsname = "Test"; 
      String dealerBrandQty = "2"; 
      otherbrands.setOtherbrandsname(otherbrandsname); 
      otherbrands.setDealerBrandQty(dealerBrandQty); 
      otherBrandsList.add(otherbrands); 
     } 

     for(int i=0;i<otherBrandsList.size();i++) 
     { 
      System.out.println(otherBrandsList.get(i).getOtherbrandsname()+"\t"+otherBrandsList.get(i).getDealerBrandQty()); 

     } 
    } 
} 

Когда я запускаю эту программу, результат:

Test 2 
Test 2 
Test 2 

Если ключ и значение то же самое, что следует рассматривать как дублировать

Можно ли удалить дубликаты из списка?

+1

Вместо этого вы можете использовать 'set', а в своем dto не забудьте переопределить' hashCode() 'и' equals() 'метод. – Kartic

+0

Вы пытались использовать тип «Карта»? –

+0

, добавляя элементы в 'list', вы можете проверить, существует ли новый элемент или нет. это вы можете сделать, переопределив 'hashCode()' и 'equals()' метод. это также может быть сделано с помощью «HashSet», вам также необходимо переопределить оба метода. читать правила контракта по этому методу – Prashant

ответ

4

Прежде всего, если вы хотите избежать дубликатов, используйте HashSet вместо списка.

Прежде всего, вам необходимо переопределить hashCode и equals, чтобы узнать, какие элементы вы считаете равными друг другу.

public class OtherBrands { 

    @Override 
    public boolean equals (Object other) 
    { 
     if (!(other instanceof OtherBrands)) 
      return false; 
     OtherBrands ob = (OtherBrands) other; 
     // add some checks here to handle any of the properties being null 
     return otherbrandsname.equals(ob.otherbrandsname) && 
       dealerBrandQty.equals(ob.dealerBrandQty); 
    } 

    @Override 
    public int hashCode() 
    { 
     return Arrays.hashCode(new String[]{dealerBrandQty,otherbrandsname}); 
    } 
} 
+0

Я не могу использовать Hashset, так как одно и то же имя может появляться дважды с разным количеством. – Pawan

+1

определите свой метод equals на основе 'name' и' quantity'. У вас есть некоторые критерии, на основании которых вы говорите дубликат. Аналогичным образом реализуйте метод equals. – Kartic

+0

@PreethiJain Вы можете использовать HashSet, если вы определяете, что два объекта равны, если они имеют одинаковое имя и одинаковое количество – Eran

1

Вы должны использовать HashSet вместо с ArrayList, поскольку она гарантирует удаление дубликатов. Это требует только применения методов hashCode() и equals() в классе OtherBrands.

В качестве подсказки, если вы используете Eclipse: вы можете сгенерировать оба метода с помощью функции меню редактора «Source/Generate HashCode и Equals». Затем выберите все атрибуты, определяющие личность элемента OtherBrands (имя, количество).

+0

Могу ли я использовать hashset ?? \t как одно и то же имя может отображаться дважды с различной величиной. – Pawan

+0

Да, вы можете, но это зависит от реализации hashCode() и equals(), поскольку эти методы определяют идентификатор для HashSet. –

Смежные вопросы