2013-06-17 3 views
1

나는 두 개의 서로 다른 종류의 두 개체가 있습니다속성을 사용하여 목록에서 객체를 추출하는 방법은 무엇입니까?

Class1 A 
List<Class2> B 

을 그리고 우리는이 -

Class2 C = new Class2(); 
B.add(C); 

내가 같은 A.fieldX == C.fieldY 같은 B의 요소를 싶어.

목록에서 반복하지 않고도 그렇게 할 수 있습니까?

+0

나는 그렇게 생각하지 않는다. 실제로 반복 할 수있는 유일한 방법은 매핑을 사용하여 기본 데이터 구조를 변경하는 것입니다. 당신이 원한다면/할 수 있는지 모르십시오. –

+0

데이터 구조가 고정되어 있지는 않지만 매핑으로 인해 문제가 어떻게 바뀌는 지 알 수 없습니다. 당신은 더 구체적 일 수 있습니까? – fxm

+0

아픈 답을 1 분 안에 넣으십시오. –

답변

1

가 목록에있는 동안 필드는 개체를 변경하지 않으면,이 비교를 용이하게하기 위해 (당신이 필요에 따라 또는 목록 또는 세트) 컬렉션의지도를 사용할 수 있습니다

Map<Field, List<Class2>> map = new HashMap<>(); 

삽입하려면 :

Class2 c = new Class2(); 

List<Class2> bucket = map.get(c.fieldY); 
if(null == bucket){ 
    bucket = new ArrayList<>(); 
    map.put(c.fieldY, bucket); 
} 
bucket.add(c); 

찾으려면 :

List<Class2> result = map.get(a.fieldX); 

이 유일한 작품 필드 경우 개체가 목록의지도에있는 동안 변경하지 마십시오. 이러한 조회를 수행하는 경우에만 의미가 있습니다 .

1

반복의 형태없이 목록에서이 작업을 수행 할 수 없습니다,하지만 당신은 매핑을 변경하는 경우 다음과 같은 코드로 그 주위를 얻을 수 있습니다 :

Map<FieldYType, Class2> B= new HashMap(); 
B.put(c.fieldY, C); 
Class2 D = B.get(A.fieldX); 
D==C;//true 
D.fieldY==A.fieldX;//true 

을 그래서 여기에 당신이에서 반복하지 말아 모두, 당신은 단지 하나의 get 함수를 사용합니다. 또한 다른지도 유형을 사용할 수도 있지만 귀하와 귀하의 코드 설계에 달려 있습니다.

+0

'c.fieldY'가 고유하지 않은 경우 어떻게해야합니까? – anubhava

+0

@anubhava 독창성은 OP 질문을 기반으로 한 가정으로 보였지만 고유하지 않은 경우 Map >을 가질 수있었습니다. 그런 다음 B.get()을 수행하면 목록을 얻고 다른 식별자를 고유 한 식별자로 사용할 수 있습니다. –

+0

지도에서 목록을 다시 얻는다면 OP가 피하려고하는 것과 같은 상황, 즉 목록을 반복하는 것과 같은 상황에 있지 않을 것입니다. – anubhava

관련 문제