2016-08-26 9 views
0

일치하는 ID를 검색하기 위해 같은 클래스의 객체들을 비교하려고합니까? 이것은 GroupClass입니다. 새 항목을 입력하면 idNumber를 테스트하여 일치하는 항목이 있는지 확인합니다. 일치하는 것을 찾기 위해 객체 목록을 보는 방법은 무엇입니까?

Public GroupClass { 

private int idNumber; 
private String name; 
private double income; 


public GroupClass(int id, String name, double income){ 
    this.idNumber = id; 
    this.name = name; 
    this.income = income; 
} 

public int getIdNumber() { 
    return idNumber; 
} 

public void setIdNumber(int idNumber) { 
    this.idNumber = idNumber; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public double getIncome() { 
    return income; 
} 

public void setIncome(double income) { 
    this.income = income; 
} 
} 

메인 방법

import static java.lang.reflect.Array.set; 
import java.util.ArrayList; 
import java.util.Comparator; 
import java.util.LinkedHashSet; 
import java.util.List; 
import java.util.Scanner; 
import java.util.Set; 


    public class ListTester { 
    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    Set<GroupClass> groupArray = new LinkedHashSet<>(); 
    System.out.println("Enter a ID Number"); 
    int id = input.nextInt(); 
    System.out.println("Enter a First Name"); 
    String name = input.next(); 
    System.out.println("Enter a an Income"); 
    double income = input.nextDouble(); 


    groupArray.add(new GroupClass(1111, "Billy", 178000)); 
    groupArray.add(new GroupClass(1112, "Sam", 78000)); 
    groupArray.add(new GroupClass(1113, "Mark", 79000)); 

    groupArray.add(new GroupClass(id, name, income)); 
    printTheClass(groupArray); 


} 

public static void printTheClass(Set group){ 
    for(Object theArray: group){ 
     System.out.println(theArray + " "); 
    } 
} 

} 

필자는 같은 몇 가지 질문을 볼 수 있지만, 단지 캔트가 사전에 내 특정 사건에 대한 감사를 작동시킬 수있다.

+0

id가 고유하다면 hashCode를 같게하고 GroupClass와 같음 –

+0

대신 'HashMap'을 사용 하시겠습니까? – Rogue

답변

0

목표가 무엇인지 확실히 확실하지로 사용할 수 있습니다

public static void printTheClass(Set<GroupClass> group){ 
    for(GroupClass theArray: group){ 
     System.out.println(theArray + " "); 
    } 
} 

public static GroupClass findTheClass(Set<GroupClass> group, int id){ 
    for(GroupClass obj: group){ 
     if(obj.getIdNumber == id) return obj; 
    } 
    return null; 
} 

을 시도합니다. ID가 이미 존재하는 경우 새로운 항목을 거부 할 경우의 hashCodeequals 메소드를 오버라이드 (override) 할 필요가 GroupClass 그래서 두 GroupClass 객체가 다른 경우 LinkedHashSet가 알고 :

그러나
@Override 
public int hashCode() { 
    return this.idNumber; 
} 

@Override 
public boolean equals(Object obj) { 
    return obj instanceof GroupClass && ((GroupClass) obj).getIdNumber() == this.idNumber; 
} 

, 대부분의 경우, ID 번호를 사용하여 항목을 검색 할 수 있습니다. 그런 다음 키로 ID로지도를 사용하는 것이 더 좋을 수도, 그리고 GroupoClass 값

Map<Integer, GroupClass> groupmap = new HashMap<>() 
groupmap.put(id, new GroupClass(id, name, income)); 

자체를 반대하고지도를 반복하는 groupmap.keySet()을 사용해야합니다.

+0

나는 그것을 HashMap으로 바꾸었고 정말 잘 작동했습니다. 감사합니다 !! – user3488019

1

위의 설명에 따라 equals 메서드를 재정의하지만 이는 클래스의 장기적인 성장에 적합하지 않을 수 있습니다.

그러나 기존의 코드를 사용하여이는

if (findTheClass (groupArray, id) == null) { 
    groupArray.add (new GroupClass(id, name, income)); 
} 
+0

또한 스트림을 사용할 수 있습니다 : groupArray.stream(). filter (gr -> gr.getIdNumber() == id) .findFirst() .Else (null) ' – maxpovver

+1

@maxpovver 휴식을 취하십시오, 난 그냥 JDK1.6에서 업그레이 드했습니다 ;-) –