java - 如何在 Kotlin 的 Map 实例上使用 `filter`?

标签 java functional-programming gson kotlin

我看到 #filter 定义于 Map ,但我无法弄清楚如何使用它。有人愿意分享一个例子吗?

我有一个深度嵌套的 TreeMap 实例 ( TreeMap<String, Map<String, Map<*, *>>> ),我想要 filter/find第一个(在域中是唯一的)顶级键,具有与值中更深层次的东西相关联的某些特征。

数据如下所示:

{
  "i1": {
    "aliases": {}
  },
  "i2": {
    "aliases": {}
  },
  "i3": {
    "aliases": {}
  },
  "i4": {
    "aliases": {
      "alias-im-looking-for": {}
    }
  }
}

我现在有以下非功能性代码可以解决它:

val indexToAliasMappingType = LinkedTreeMap<String, Map<String, Map<*, *>>>()
val indexToAliasMappings = Gson().fromJson(response.jsonString, indexToAliasMappingType.javaClass)

var currentIndexName = ""
for ((index, aliasMappings) in indexToAliasMappings) {
    val hasCurrentAlias = aliasMappings.get("aliases")?.containsKey(alias)
    if (hasCurrentAlias != null && hasCurrentAlias) {
        currentIndexName = index
    }
}

return currentIndexName

最佳答案

看起来您需要的是符合您条件的第一个条目的关键部分。像这样的东西(有意单行)应该会有所帮助:

val currentIndexName = indexToAliasMappings.filterValues { it["aliases"]?.containsKey(alias) ?: false }.keys.firstOrNull() ?: ""

关于java - 如何在 Kotlin 的 Map 实例上使用 `filter`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40533722/

相关文章:

java - 获取对 JOptionPane 静态方法创建的对象的引用

java - 有没有办法在运行时获取正在使用的 Guava 版本?

java - 如何序列化 Map<String, Map<MetricName, ?扩展 Metric>> 生成 Metrics Json 对象

javascript - 链接 map reduce 过滤器时如何减少迭代?

java - Gson - 尝试将 json 字符串转换为自定义对象

java - 如何使用带有 Gson 的 retrofit2 将空字符串视为 null

java - 如何使用 System.out.format() 在 Java 中的一行上显示多个项目?

haskell - 为什么函数式编程语言需要垃圾收集?

functional-programming - 函数式编程的 future

java - 如何用GSON传递JPA实体?