2017-02-07 17 views
7

Trong Scala, nó chỉ là hàm map. Ví dụ, nếu HashMap là một HashMap của chuỗi, sau đó bạn có thể làm như sau:Cách thành ngữ để biến đổi bản đồ trong kotlin?

val result : HashMap[String,String] = hashMap.map(case(k,v) => (k -> v.toUpperCase)) 

Trong Kotlin, tuy nhiên, map biến bản đồ vào một danh sách. Có cách nào để làm điều tương tự trong Kotlin không?

+0

Làm thế nào về 'mapKeys',' mapValues' hoặc áp dụng 'groupBy' vào kết quả của' map' đơn giản? – yeputons

+0

@yeputons. Tôi không biết. Bạn cho tôi biết nếu đó là thành ngữ. Vui lòng thêm câu trả lời –

+0

Bạn nên chấp nhận câu trả lời từ @ James-bassett –

Trả lời

11

Tôi không nghĩ rằng quan điểm của một người đếm như thành ngữ, nhưng tôi có lẽ muốn sử dụng

// transform keys only (use same values) 
hashMap.mapKeys { it.key.toUpperCase() } 

// transform values only (use same key) - what you're after! 
hashMap.mapValues { it.value.toUpperCase() } 

// transform keys + values 
hashMap.entries.associate { it.key.toUpperCase() to it.value.toUpperCase() } 
+1

Đây là những gì tôi sẽ làm mặc dù nếu bạn chỉ chuyển đổi giá trị thì bạn có thể sử dụng 'mapValues' thay thế (ví dụ:' hashMap.mapValues ​​{it.value .toUpperCase()} ') nhưng cá nhân tôi không thích chữ ký của' mapValues' vì nó sử dụng 'transform: (Map.Entry ) -> R' thay vì' transform: (V) -> R' mà dường như với tôi là không phù hợp với 'filterValues ​​(predicate: (V) -> Boolean)' nghĩa là bạn không thể viết 'hashMap.mapValues ​​(String :: toUpperCase)' vì vậy tôi chỉ sử dụng 'hashMap.entries.associate {... } '. – mfulton26

+0

Cập nhật để bao gồm 'mapValues ​​()' là tốt, cảm ơn @ mfulton26 –

0

Bạn có thể sử dụng stdlib mapValues function mà người khác đã gợi ý:

hashMap.mapValues { it.value.toUpperCase() } 

Tôi tin rằng đây là cách thành ngữ nhất.

0

Tôi đã tìm thấy một biến thể khác. Dường như rõ ràng hơn

val result = mapOf(*hashMap.map { it.key.toUpperCase() to it.value.toUpperCase() }.toTypedArray()) 

Nó sẽ tự động suy ra loại bản đồ kết quả.

.toTypedArray() là bắt buộc để sử dụng toán tử splat(*).

Các vấn đề liên quan