2016-08-30 85 views
2

我想创建可从Java访问的Kotlin实用程序,该实用程序可将字符串列表转换为Map。到目前为止,我已经写了:Kotlin映射&将字符串数组映射到Map <String,Any!>

class Utils { 
    companion object { 
     @JvmStatic fun values(item: GSAItem): Map<String, Object> { 
      return item.itemDescriptor.propertyNames.map {it -> Map.Entry<String, Any!>(it, item.getPropertyValue(it)) };   } 
    } 
} 

但我发现了错误

Error:(16, 74) Kotlin: Unresolved reference: Entry 

GSAItem.getPropertyValue是Java方法这需要字符串作为参数并返回对象。之后,我怀疑我需要从Java 8中找到一些等价的collect函数?

+0

什么是KeyStore类? – yole

+0

@yole我猜这是[KeyStore](https://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html)。 'KeyStore.Entry'是一个标记接口。你的意思是使用'PrivateKeyEntry','SecretKeyEntry'或'TrustedCertificateEntry'来代替吗? – Enrico

+0

哎呀,对不起。我尝试了不同的导入,并最终粘贴了错误的代码。我编辑它以匹配原始版本。 –

回答

1

Map.Entry - stdlib - Kotlin Programming Languageinterface,因此它不具有构造函数这就是为什么你得到一个错误(也许不是最好的消息)。你可以找到一个实现,让你自己的,或者使用associate代替:

class Utils { 
    companion object { 
     @JvmStatic fun values(item: GSAItem): Map<String, Any?> { 
      return item.itemDescriptor.propertyNames.associate { it to item.getPropertyValue(it) } 
     } 
    } 
} 

请注意,您应该使用的AnyAny?代替java.lang.Object

+0

太好了,谢谢你的解释和小费与同事。 –

1

怎么是这样的:

item.itemDescriptor 
    .propertyNames 
    .map { name -> name to item.getPropertyValue(name) } 
    .toMap() 
+0

谢谢!你和mfulton26的代码都可以工作,但我只能接受一个答案。我错过了我无法直接创建MapEntry。 –

+2

你可以upvote尽可能多的答案,只要你喜欢 –

+0

@LanceJava是的,我知道,谢谢。我已经做了,由于我“太年轻”,我的upvotes还没有看到:) –

相关问题