2013-06-28 2 views
0

그래서 TreeMap<MyDataType, Integer>이 있는데, MyDataTypeStringLong을 포함하는 개체입니다. 트리 맵 contains에 특정 키가 있는지 확인하고 싶습니다. String; 그러나 개체와 관련된 Long은 내게 중요하지 않습니다. 예를 들어, 내 TreeMap는 다음과 같이 수 :TreeMap에 객체가 포함되어 있는지 확인합니다.보다 일반적인 사양이 필요합니까?

{MyDataType: ["Tom", 1L] -> 1, MyDataType: ["Billy", 3L] -> 1, MyDataType: ["Ryan", 8L] -> 1} 

내가 TreeMap가 (유형 MyDataType의) 키가 포함되어있는 경우 그 String 값 "빌리"입니다보고 싶어요. 이 작업을 수행하는 두 가지 방법을 생각해 볼 수 있습니다 :

(1) 각 MyDataType 키의 String을 확인하여 하나씩 TreeMap을 반복합니다. (2) TreeMap<MyDataType, Integer>을 확장하는 새로운 클래스를 작성하고 특별히 수행 할 작업을 수행하는 새 containsKeyWithStringValue(String toCheck)을 작성하십시오.

다른 간결한 방법이 있습니까?

+0

왜 TreeMap을 사용하고 있습니까?지도 항목의 순서가 중요합니까? 그들이 현재 주문한 물건은 무엇입니까? – Bohemian

답변

2

나는이 (더 효율적이지 일을 더 간결 방법이 있는지, 당신이 요구하는 등 기본적으로

+0

두 개의 TreeMaps를 모두 가지고 있다면, 'TreeMap 를 검사하여 내 사양에 따라 객체가 들어 있는지 확인한 다음 다른 용도로 사용하려면 원래의 TreeMap 를 사용하십시오. 다시? –

+0

'String'으로 내용을보고 싶다면 왜 'TreeMap '를 가질까요? –

+0

여전히'TreeMap '를 가지고 있는지 여부는 자신의 특정 요구 사항에 달려 있습니다. 특히, 전체'MyDataType'에 의해'Integer'를 찾아야할지 여부는 다릅니다. – rgettman

0

2에 직접 "Tom"을지도하는 TreeMap<String, Integer>, 5-"Billy"을 만들 것, 더 확장 가능, etctera)

나는 대답은 아니오라고 생각합니다.

  • 표준 Java Map API는 get을 제외한 맵을 쿼리하는 메커니즘을 제공하지 않습니다.

  • Guava 라이브러리에는 키, 값 및 맵 항목 필터링을위한 기능을 포함하여 기능 스타일 프로그래밍 지원이 포함되어 있습니다. here을 참조하십시오. 그러나 구아바 조건자를 구현하는 데 필요한 모든 상용구를 포함하면 의심 됨입니다. 수동으로 항목을 반복하고 테스트하는 것보다 간결합니다.

"miss"에 예외가 발생해야합니다. String/Integer가 엔트리와 일치하지 않을 때. 이 제약 조건을 가진 대답은 분명히 없습니다. 콜렉션 API는 일반적으로 Java에서 예외를 생성하고 던지는 것이 상대적으로 비싸기 때문에 "miss"가있는 경우 null을 반환하도록 정의됩니다.


Java 8에서는 새로운 람다 및 관련 기능으로 인해 기능 스타일 프로그래밍이 쉬워지기 때문에 첫 번째 부분에 대한 대답이 변경 될 가능성이 있습니다. 그러나 이것은 미스가 예외를 초래해야한다는 귀하의 요구 사항을 해결하지 못할 것입니다.


마지막으로 사용자 정의 방법으로 TreeMap을 확장하는 아이디어가 마음에 들지 않습니다. 나는 당신이 클래스 중 하나 또는 정적 도우미 메서드로 "확장 된 기능"구현한다고 생각합니다. 이것은 객관적인 이유는 아니지만이 상황에서 확장은 나에게 "적절하다고 느낍니다".