当前位置: 首页 > 知识库问答 >
问题:

排序序列(或映射)时,我可以调用sortWith内部的方法吗?

鲍向笛
2023-03-14

我有一个map Map[String, Option[Seq[String]]],并且我在不同的map中为每个字符串都有值:Map[String, Option[Int]]。我正在尝试映射值并在序列上使用sortAnd,但当我在线阅读时,我没有看到任何在sortAnd中具有自定义方法的示例。

如何使用sortWith对序列进行排序?如果我想实现一个自定义方法,返回一个布尔值来告诉我什么对象被认为更大,这可能吗?

val fieldMap = Map("user1" -> Seq("field1_name", "field2_name"), "user2" -> Seq("field3_name"))
val fieldValues = Map("field1_name" -> 2, "field2_name" -> 1, "field3_name" -> 3)

val sortedMap = fieldMap.mapValues(fieldList => fieldList.sortWith(fieldValues(_) < fieldValues(_)) // Scala doesn't like this

我尝试了:

fieldList.sortWith{(x,y) => 
    val x = fieldValues(x) 
    val y = fieldValues(y)

    x < y
}

这给了我一个预期类型的类型不匹配:

(String,String) => Boolean

和实际:

(String,String) => Any

编辑解决方案:

fieldList.sortWith{(x,y) => 
        val x = fieldValues(x) 
        val y = fieldValues(x)

        x.getOrElse[Double](0.0) < y.getOrElse[Double](0.0)  // have to unwrap the Option. 
}

共有1个答案

林礼骞
2023-03-14

你用错了语法。要使用sortWith,您必须执行以下操作:

fieldMap.mapValues(
   fieldList => fieldList.sortWith(
     (a,b) => fieldValues(a) > fieldValues(b)
   )
)
 类似资料:
  • (“Samsung”,(“Galaxy”,20)) (“苹果”,(“iPhone”,40)) 我需要按照内部键的字母顺序对映射进行降序排序(在这个例子中是模型名) 我到目前为止的排序是这样的: Map.EntrySet().Stream.Foreach(entry->entry.GetValue().EntrySet().Stream().Sorted(Comparator.Comparative

  • 我正在proto3中创建消息对象,并使用自动生成的java类。我想为每个消息对象分配唯一的密钥。 在构建期间,它从微服务接收一个名为的原型对象,定义如下: 基于对象中的条目,通过遍历映射并散列每个条目来创建。( protobuf文档说,密钥的顺序无法定义。我应该如何保证在键域中具有相同条目的不同元数据对象生成相同的唯一键?

  • 我有一个连接到外部数据库的应用服务器的吊舱。为了冗馀,我希望运行多个POD,所以我使用rolingupdate策略将部署扩展到3个(MAXSURABE=1和MAXUNAVABLE=1)。 有时(大多数情况下)pods在第一次创建时失败,因为我使用的是liquibase,所有pods都试图同时锁定数据库。

  • 问题内容: 简而言之:无论地图的类型如何,如何按已排序的键顺序遍历地图? 我发现了一些相关的问题,最接近的问题表明,如果不依靠模块,就不可能做到这一点。这种理解正确吗? 考虑下面的Go代码,该代码以其键的排序顺序遍历两个不同类型的映射: 对于两种不同的地图类型,提取键然后对其进行排序的逻辑是重复的。 有什么方法可以排除这种逻辑并避免重复吗? 我在尝试编写提供方法的接口时遇到了麻烦。特别是,of的返

  • 当我们在debian机器中使用g编译下面的代码时,会生成以下错误。。。有人能帮我解释一下为什么会出现错误吗?我试着注释排序行,然后出现错误,但是我们的任务需要排序,那么可能的解决方案是什么 代码: 输出: 在/usr/include/c/4.7/algorithm:63:0中包含的文件中,来自testvect。cpp:3:/usr/include/c/4.7/bits/stl\u algo。h: