2015-09-28 4 views
0

Как сгенерировать порядковые номера и назначить их каждому объекту в java?Создание порядковых номеров в Java из ArrayList

, например, у меня есть следующий,

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Iterator; 
import java.util.List; 

public class MyMaxUDOComparable 
{ 

    public static Integer findMaxScore(List<testVO> emps) 
    { 
     Integer maxScoreTotal = 0; 

     for (Iterator<JobFitSurveyConfigVO> iterator = emps.iterator(); iterator.hasNext();) 
     { 
      testVOempl = (testVO) iterator.next(); 

      if (empl != null) 
      { 
       maxScoreTotal += empl.getSalary(); 
      } 

     } 
     return maxScoreTotal; 
    } 

    public static void main(String a[]) 
    { 

     List<testVO> emps = new ArrayList<testVO>(); 
     emps.add(new testVO(10, "Raghu", 10,1)); 
     emps.add(new testVO(120, "Krish", 10,2)); 
     emps.add(new testVO(210, "John", 10,3)); 
     emps.add(new testVO(150, "Kishore", 10,4)); 
     testVOmaxSal = Collections.max(emps); 

     System.out.println("Employee with max Id: " + maxSal); 
     System.out.println("maxScoreTotal: " + findMaxScore(emps)); 
    } 
} 

class testVOimplements Comparable<testVO> 
{ 

    private Integer id; 
    private String name; 
    private Integer salary; 
    private Integer sequenceNumber; 

    public testVO(Integer id, String name, Integer sal,Integer sequenceNumber) { 
     this.id = id; 
     this.name = name; 
     this.salary = sal; 
    } 

    public Integer getId() 
    { 
     return id; 
    } 
    public void setId(Integer id) 
    { 
     this.id = id; 
    } 
    public String getName() 
    { 
     return name; 
    } 
    public void setName(String name) 
    { 
     this.name = name; 
    } 
    public Integer getSalary() 
    { 
     return salary; 
    } 
    public void setSalary(Integer salary) 
    { 
     this.salary = salary; 
    } 

    public Integer getSequenceNumber() 
    { 
     return sequenceNumber; 
    } 

    public void setSequenceNumber(Integer sequenceNumber) 
    { 
     this.sequenceNumber = sequenceNumber; 
    } 

    @Override 
    public int compareTo(JobFitSurveyConfigVO emp) 
    { 

     return this.id.compareTo(emp.getId()); 
    } 
    public String toString() 
    { 
     return id + " " + name + " " + salary; 
    } 
} 

в классе выше, я присвоил значения всех объектов для Sequence Number и если я удалить объект из списка, то Sequence Number должен быть повторно генерируется ,

как это сделать в java, будет ли кто-нибудь помогать мне в этом, пожалуйста ?.

+0

Это зависит, как вы ва nt, чтобы повторно использовать порядковые номера или они просто увеличиваются? – MadProgrammer

+1

Почему 'id',' зарплата' и 'sequenceNumber' типа' Integer'? Разве 'int' не будет лучше? Или они могут быть «нулевыми»? – Andreas

+0

Когда какой-либо объект удален, вы хотите, чтобы объекты, следующие за удаленным объектом, имели последовательностьNumber = sequenceNumber -1? –

ответ

1
public void deleteObjFormList(JobFitSurveyConfigVO emp,List<JobFitSurveyConfigVO> emps) 
    { 
     int i = emps.indexOf(emp); 
     emps.remove(i); 
     for(int j=i;j<emps.size();j++) 
     { 
      JobFitSurveyConfigVO emp1 = emps.get(j); 
      emp1.setSequenceNumber(emp1.getSequenceNumber()-1); 
     } 
     return; 
    } 

Я это это должно быть функцией, чтобы удалить объект из списка.

+1

Это не будет компилироваться (отсутствует возвращаемое значение). – Andreas

+0

Поскольку код OP никогда не устанавливает порядковый номер для начала (да, возможно, ошибка), это вызовет NPE. ;-) – Andreas

+0

этот код написан с предположением, что arrayList уже содержит правильно присвоенные порядковые номера. и будет обрабатывать операцию для удаления одного объекта из массива. –

0

Вы перебираете список и задаете порядковый номер.

Помните, что ваш конструктор не назначает порядковый номер, поэтому, хотя вы предоставили значения, все они null. Если вы измените тип на более разумные int, они будут 0.

// Renumber (aka resequence) the emp records 
for (int i = 0; i < emps.size(); i++) 
    emps.get(i).setSequenceNumber(i + 1); 
+0

или лучшее решение - просто выполнить sequenceNumber = sequenceNumber -1 для всех объектов, следующих за удаленным объектом. –

+0

@ Java-уступ True, но поскольку примера удаления не существует, позиция удаленного значения может быть неизвестна. Отдельная полная нумерация также может быть лучше, если удалить несколько элементов. Все зависит, но эта реализация всегда будет работать, даже если это не обязательно самая эффективная, и поскольку OP боксирует все целые числа, эффективность не является верхней частью списка. – Andreas

+0

Для проголосовавших, пожалуйста, объясните, почему этот ответ не пригодится? – Andreas

0

попробовать этот путь

public static void main(String a[]) { 

List<JobFitSurveyConfigVO> emps = new ArrayList<JobFitSurveyConfigVO>(); 

    ArrayList<Integer> seq = new ArrayList<Integer>(); 
    addElement(seq, emps, 10, "Raghu", 10); 
    addElement(seq, emps, 120, "Krish", 10); 
    addElement(seq, emps, 210, "John", 10); 
    addElement(seq, emps, 150, "Kishore", 10); 

    System.out.println("Display : "+emps); 

    removeElement(2, seq, emps); 
    System.out.println("Removed : "+emps); 

    addElement(seq, emps, 210, "John2", 10); 
    System.out.println("Added : "+emps); 
} 

Добавить элемент и удалить методы Element

public static void addElement(ArrayList<Integer> seq, 
     List<JobFitSurveyConfigVO> emps, int id, String name, Integer salary) { 

    int size = seq.size(); 
    Collections.sort(seq); // Make sure they are in Sequence. 
    if (size > 1) { 
     for (int i = 1; i < size; i++) { 
      int check = seq.get(i-1); 
      if ((check + 1) != (seq.get(i))) { 
       seq.add(check + 1); 
       emps.add(new JobFitSurveyConfigVO(id, name, salary, (check + 1))); 
       break; 
      } 
      if (i+1 == size) { 
       seq.add(seq.get(i) + 1); 
       emps.add(new JobFitSurveyConfigVO(id, name, salary, (seq.get(i) + 1))); 
      } 
     } 
    }else if (size == 1 && seq.get(0) == 1) { 
     int check = seq.get(0); 
     seq.add(check + 1); 
     emps.add(new JobFitSurveyConfigVO(id, name, salary, (check + 1))); 
    }else{ 
     seq.add(1); 
     emps.add(new JobFitSurveyConfigVO(id, name, salary, 1)); 
    } 
} 
public static void removeElement(int index, ArrayList<Integer> seq, List<JobFitSurveyConfigVO> emps){ 
    if (index < seq.size()) { 
     emps.remove(index); 
     seq.remove(index); 
    }else { 
     throw new ArrayIndexOutOfBoundsException(); 
    } 
} 

конструктор

public JobFitSurveyConfigVO(Integer id, String name, Integer sal,Integer sequenceNumber) { 
    this.id = id; 
    this.name = name; 
    this.salary = sal; 
    this.sequenceNumber = sequenceNumber; 
} 
Смежные вопросы