2011-10-31 2 views
9

개체 목록이 있습니다. 각 개체는 "key"및 "value"라고하는 두 개의 관심 필드가 있습니다. 그로부터 "키"가 "가치"에 매핑되는 항목으로 구성된 HashMap을 작성해야합니다.루프없이 개체 목록에서 스칼라로 HashMap 만들기

목록을 반복하면서 목록의 모든 항목에 대해 hmap.put(obj.key, obj.value)을 호출하면됩니다. 하지만 어쨌든이 코드는 map 또는 flatMap 또는 스칼라 목록 연산의 다른 혼합을 사용하여 코드의 한 줄에서 기능적 구성을 사용하여 수행 할 수 있습니다. 나는 "냄새가났다"고 제대로 했는가? 또한

답변

17
list.map(i => i.key -> i.value).toMap 
+4

영업 이익이 아닌'지도' – samthebest

+1

경고'HashMap'을 원한다 (A new 키워드를 가지고하지 기억) : 중복 키는 지원하지 않습니다! –

8

:

Map(list map (i => i.key -> i.value): _*) 
+0

이 장점은 필요한 맵 유형을 지정할 수 있다는 것입니다. 따라서 더 일반적인 패턴입니다. –

+1

@LuigiPlinge 사실입니다. 나는 훨씬 더 읽기 쉽기 때문에'.toMap'을 사용하는 것을 선호한다. 퍼포먼스가 큰 관심사라면 _maybe_는 'breakOut'을 사용합니다. –

+0

나는 그 마지막 부분과 함께 길을 잃었다 : _ * 밑줄이 기능 변수를위한 자리 표시 자라는 것을 알았지 만 그 표현에 맞는 방법이나 별표와 콜론의 역할을 볼 수 없다. . – Gigatron

4

콜렉션에서 만들려면

val result: HashMap[Int, Int] = HashMap(myCollection: _*)