обнаруживать повторяющиеся элементы в списке массивов с несколькими столбцами в Android / Java?

#java #android #collections #arraylist #core

#java #Android #Коллекции #список массивов #Ядро

Вопрос:

у меня есть структура списка массивов, упомянутая ниже.

 ArrayList<Arraylisttableitem> tablestatuslist = new ArrayList<Arraylisttableitem>();
  

класс модели для этого списка массивов упоминается ниже.

 public class Arraylisttableitem {

    String total, noofcustomer, firstname, tab_name, balance, time;

    public Arraylisttableitem(String total, String noofcustomer,
            String firstname, String tab_name, String balance, String time) {
        // TODO Auto-generated constructor stub
        this.total = total;
        this.noofcustomer = noofcustomer;
        this.firstname = firstname;
        this.tab_name = tab_name;
        this.balance = balance;
        this.time = time;
    }

    public String getTotal() {
        return total;
    }

    public void setTotal(String total) {
        this.total = total;
    }

    public String getNoofcustomer() {
        return noofcustomer;
    }

    public void setNoofcustomer(String noofcustomer) {
        this.noofcustomer = noofcustomer;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getTab_name() {
        return tab_name;
    }

    public void setTab_name(String tab_name) {
        this.tab_name = tab_name;
    }

    public String getBalance() {
        return balance;
    }

    public void setBalance(String balance) {
        this.balance = balance;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }
}
  

в элементе с именем tab_name у меня могут быть повторяющиеся элементы. я хочу идентифицировать дублированный элемент и добавить все повторяющиеся значения. например, tab_num 10 имеет баланс 5, а tab_num 10 имеет баланс 10. я хочу, чтобы tab_nam 10 отображался один раз, а баланс должен быть равен 15 без какого-либо повторяющегося значения в списке.

пожалуйста, решите мою проблему…

я не знаю, что написать внутри этого..

 for(Arraylisttableitem itemlist : tablestatuslist)
                    {

                    }
  

мой JSON имеет повторяющиеся значения. итак, мой список массивов поддерживает повторяющееся значение.

Комментарии:

1. Почему бы не обработать этот случай при добавлении объектов в список массивов, а не удалять дубликаты позже?

2. @ShivamVerma это замедлило бы всю операцию при каждом добавлении данных.

Ответ №1:

Если вы хотите добавить значения, то лучше сохранить типы полей как int, а не string. Однако в вашем случае вы могли бы сделать следующее

 Map<String, Arraylisttableitem> map = new HashMap<String, Arraylisttableitem>();
for(Arraylisttableitem item : tableStatusList){
    Arraylisttableitem prevItem = map.get(item.getTab_name());
    if(prevItem != null){
        prevItem.setTotal(String.valueOf(Integer.parseInt(item.getTotal())   Integer.parseInt(prevItem.getTotal())));
        prevItem.setBalance(String.valueOf(Integer.parseInt(item.getBalance())   Integer.parseInt(prevItem.getBalance())));
        prevItem.setNoofcustomer(String.valueOf(Integer.parseInt(item.getNoofcustomer())   Integer.parseInt(prevItem.getNoofcustomer())));
        prevItem.setTime(String.valueOf(Integer.parseInt(item.getTime())   Integer.parseInt(prevItem.getTime())));
        map.put(item.getTab_name(), prevItem);
    } else {
        map.put(item.getTab_name(), item);
    }
}       
tableStatusList = new ArrayList<Arraylisttableitem>(map.values());
  

Ответ №2:

  • Перейдите из списка в набор, поскольку наборы не допускают дублирования значений.
  • В Arraylisttableitem переопределяются методы hashCode и равно*

Комментарии:

1. я должен поддерживать повторяющееся значение.

2. Это не добавляет значения.

Ответ №3:

Используйте HashMap для каждого элемента. Когда вы помещаете элемент на карту, он вернет вам старый элемент, который ранее был там сохранен. Итак, это то место, где вы можете объединить их.