2016-10-17 4 views
-1

두 개의 객체 배열이 있습니다 : ArrayList<Object> list1 и ArrayList<Object> list2. 내 코드의개체 배열간에 필드를 비교하는 방법은 무엇입니까?

예 (간체) :

Class Object1 { 
String str1 = "example"; 
} 

Class Object2 { 
String str2 = "example"; 
} 

ArrayList<Object> list1 = new ArrayList<>(); 
list1.add(new Object1()); 
ArrayList<Object> list2 = new ArrayList<>(); 
list2.add(new Object2()); 

문제 : 나는

+1

처럼 str1str2을 비교할 수'Object1'와'Object2' 각 클래스는 문자열을 반환하는 getter 메소드를 선언 같은 인터페이스를 구현한다. 그런 다음 두 클래스가 각각의 클래스가 문자열을 공통 인터페이스 getter 메소드의 반환 값과 비교하는 'Comparable'인터페이스를 구현하도록합니다. –

+0

[Java Compare Two List의 객체 값의 복제본이 있습니까?] (http://stackoverflow.com/questions/16207718/java-compare-two-lists-object-values) – saurav

답변

0

1 목록을 반복 할 수없는 이유는 필드의 getter를 호출하고 다른 목록의 해당 객체와 비교하는 이유입니다.

for (int i = 0; i < list1.size(); i++) { 
    Object obj1 = list1.get(i); 
    Object obj2 = list2.get(i); 
    System.out.println(obj1.str1.equals(obj2.str2)); // Better use getter here instead 
} 
+0

이 경우 게터에 액세스 할 수 없습니다. 무엇이 잘못 될 수 있습니까? (이 코드는 "main"이 아닌 메소드에 사용됩니다.) – Gleb

+0

@GlebTserr 기술적으로는 아무것도 아닙니다. 그러나 설계면에서는 나쁜 습관이고 캡슐화를 깨뜨리지 않으므로 피해야합니다. –

0

당신이 목록 1을 비교할 수 있습니다 (다른 배열에 위치한다는 오브젝트 1 및 Object2 사이) 필드 str1과 str2와 비교해야합니다. list2.get (0) .str2를 사용하여 (0) .str1을 얻으십시오. for 루프를 사용하는 경우 get (0) 대신 get (i)를 사용하십시오.

+0

이 경우에 액세스 할 권한이 없습니다. 변수. – Gleb

0

당신은 할 수

list1.get(indexOfObject1InList1).str1.equals(list2.get(indexOfObject2InList2).str2) 
+0

"점"연산자를 통해 변수에 액세스 할 수 없습니다. 무엇이 잘못 될 수 있습니까? – Gleb

관련 문제