2015-12-22 3 views
2

У меня есть вопрос о том, как удалить дубликат для нескольких массивов. В основном, чего я хочу достичь, это сравнить с 4-мя массивами, и если сложение массива будет точно таким же, то я хочу, не хочу распечатывать. Пример содержит для каждого как ниже показано:Java Удаление дубликатов из нескольких массивов

ArrayStudentName ArrayAge  ArrayGender ArrayCourse 
A      9    Boy   IT 
B     10    Boy   IT 
B      9    Boy   IT 
A      9    Boy   IT 
A      9    Girl   IT 

Это единственный способ, чтобы удалить дубликат с использованием 4 раза для петель или же я должен объединить 4 массивов в 1 массив, а затем использовать HashMap для удалите дубликат, прежде чем вы распечатать результат. Результат я нужен:

ArrayStudentName  ArrayAge  ArrayGender ArrayCourse 
    A      9    Boy   IT 
    B     10    Boy   IT 
    B      9    Boy   IT 
    A      9    Girl   IT 
+7

Определите POJO для атрибутов и переопределить метод equals и сохранить их в структуре Set. – YoungHobbit

+0

@ThisaruGuruge ранее я использовал 4 для цикла, чтобы удалить дубликат, но кажется сложным и беспорядочным. пока я пытаюсь использовать HashMap для этого, но я пытаюсь получить, есть ли более простой способ сделать это. – Aaron

+0

Или зациклируйте первый массив и найдите дубликаты, если вы нашли дубликат в первом массиве, проверьте, совпадают ли элементы в другом массиве с двумя повторяющимися индексами - если они выполняются во всех массивах, то вы действительно нашли дубликат и может удалить его. – luk2302

ответ

6

Вы должны быть смелыми и принять маршрут ООП. Сделайте class под названием Student и сложите все значения в этот класс. Тогда вам просто нужно поместить их в Set, который по определению не позволяет дублировать.

Вы, тем не менее, должны реализовать equals и hashcode (или Comparable если вы решили не использовать HashSet).

enum Gender { 

    Boy, Girl, Other; 
} 

enum Course { 

    IT, CS; 
} 

class Student { 

    final String name; 
    final int age; 
    final Gender gender; 
    Course course; 

    public Student(String name, int age, Gender gender) { 
     this.name = name; 
     this.age = age; 
     this.gender = gender; 
    } 

    public Course getCourse() { 
     return course; 
    } 

    public void setCourse(Course course) { 
     this.course = course; 
    } 

    @Override 
    public String toString() { 
     return name + "\t" + age + "\t" + gender + "\t" + course + "\n"; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 5; 
     return hash; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (obj == null) { 
      return false; 
     } 
     if (getClass() != obj.getClass()) { 
      return false; 
     } 
     final Student other = (Student) obj; 
     if (!Objects.equals(this.name, other.name)) { 
      return false; 
     } 
     if (this.age != other.age) { 
      return false; 
     } 
     if (this.gender != other.gender) { 
      return false; 
     } 
     return true; 
    } 

} 

public void test() { 
    System.out.println("Hello"); 
    List<Student> students = Arrays.asList(
      new Student("A", 9, Gender.Boy), 
      new Student("B", 10, Gender.Boy), 
      new Student("B", 9, Gender.Boy), 
      new Student("A", 9, Gender.Boy), 
      new Student("A", 9, Gender.Girl) 
    ); 
    // Fold it into a Set to eliminate duplicates. 
    Set all = new HashSet(); 
    all.addAll(students); 
    // Pull back out into a List. 
    System.out.println("Students:\n" + all); 
} 
+0

Этот ответ лучше моего ответа. Это должно быть принято! –

+0

Я должен согласиться с @OldCurmudgeon, его предложение - лучшая практика, и ваш код будет чистым и понятным, – Liron

+0

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

0

Создать Student Класс.

public class Student { 
    private String name; 
    private int age; 
    private String gender; 
    private String course; 

    // Implement Getters and Setters here. 


    // Then Override the equals method like this: 
    @Override 
    public boolean equals(Object obj) { 
    Student student = (Student) obj; 
    if (this.name.equals(student.getName()) && 
     this.age == student.getAge() && 
     this.gender.equals(student.getGender()) && 
     this.course.equals(student.getCourse()) 
     ) { 
     return true; 
    } 
    else { 
     return false; 
    } 
    } 
} 

Теперь вы можете создать массив Student объектов и сравнить их с помощью equlas метода.

0

простой способ: использовать набор (для получения уникальных записей), заказ Держит: LinkedHashSet

Затем прочитайте каждую строку в списке < String>

и держать их в LinkedHashSet < Список < Струнный >>

Это дает что-то подобное (вы должны цикла и сканировать ДАННЫЕ конечно!)

Set<List<String>> sls=new LinkedHashSet<List<String>>(); 

sls.add(Arrays.asList(new String[]{"A","9","Boy","IT"})); 
sls.add(Arrays.asList(new String[]{"B","10","Boy","IT"})); 
sls.add(Arrays.asList(new String[]{"B","9","Boy","IT"})); 
sls.add(Arrays.asList(new String[]{"A","9","Boy","IT"})); 
sls.add(Arrays.asList(new String[]{"A","9","Girl","IT"})); 

System.out.println(sls); 
Смежные вопросы