나는 두 개의 서로 다른 종류의 두 개체가 있습니다속성을 사용하여 목록에서 객체를 추출하는 방법은 무엇입니까?
Class1 A
List<Class2> B
을 그리고 우리는이 -
Class2 C = new Class2();
B.add(C);
내가 같은 A.fieldX == C.fieldY
같은 B의 요소를 싶어.
목록에서 반복하지 않고도 그렇게 할 수 있습니까?
나는 두 개의 서로 다른 종류의 두 개체가 있습니다속성을 사용하여 목록에서 객체를 추출하는 방법은 무엇입니까?
Class1 A
List<Class2> B
을 그리고 우리는이 -
Class2 C = new Class2();
B.add(C);
내가 같은 A.fieldX == C.fieldY
같은 B의 요소를 싶어.
목록에서 반복하지 않고도 그렇게 할 수 있습니까?
가 목록에있는 동안 필드는 개체를 변경하지 않으면,이 비교를 용이하게하기 위해 (당신이 필요에 따라 또는 목록 또는 세트) 컬렉션의지도를 사용할 수 있습니다
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);
이 유일한 작품 필드 경우 개체가 목록의지도에있는 동안 변경하지 마십시오. 이러한 조회를 수행하는 경우에만 의미가 있습니다 .
반복의 형태없이 목록에서이 작업을 수행 할 수 없습니다,하지만 당신은 매핑을 변경하는 경우 다음과 같은 코드로 그 주위를 얻을 수 있습니다 :
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 함수를 사용합니다. 또한 다른지도 유형을 사용할 수도 있지만 귀하와 귀하의 코드 설계에 달려 있습니다.
나는 그렇게 생각하지 않는다. 실제로 반복 할 수있는 유일한 방법은 매핑을 사용하여 기본 데이터 구조를 변경하는 것입니다. 당신이 원한다면/할 수 있는지 모르십시오. –
데이터 구조가 고정되어 있지는 않지만 매핑으로 인해 문제가 어떻게 바뀌는 지 알 수 없습니다. 당신은 더 구체적 일 수 있습니까? – fxm
아픈 답을 1 분 안에 넣으십시오. –