首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在scala中使用java8 lambda及其函数

如何在scala中使用java8 lambda及其函数
EN

Stack Overflow用户
提问于 2019-03-29 10:54:55
回答 2查看 1.1K关注 0票数 3

我有这样的密码:

代码语言:javascript
复制
public class A {

    private String id;
    //constructor, getter, setter

}

在java中,我可以使用以下内容:

代码语言:javascript
复制
public class C {

    @Test
    public void t() {
        List<A> list = Arrays.asList(new A("1"));
        list.sort(Comparator.comparing(A::getId));
        Map<String, List<A>> map = list.stream().collect(Collectors.groupingBy(A::getId));
    }
}

以下是scala(2.12)测试:

代码语言:javascript
复制
class B {

  @Test
  def t(): Unit = {
    val list = util.Arrays.asList(new A("1"))
    list.sort(Comparator.comparing(a => a.getId))
    list.stream().collect(Collectors.groupingBy(a => a.getId))
  }

}

但是在scala测试中,list.sort(Comparator.comparing(a => a.getId))将得到两个错误:

  1. 错误:(21,26)推断类型参数com.test.A,?0不符合方法比较的类型参数界[T,U <:Comparable_ >:U]
  2. 错误:(21,38)类型错配;找到: java.util.function.Functioncom.test.A,字符串必需: java.util.function.Function_ >:T,_ <:U

list.stream().collect(Collectors.groupingBy(a => a.getId))将得到以下错误:

  1. 错误:(22,49)缺少参数类型

我该怎么用呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-02 09:42:19

试一试

代码语言:javascript
复制
import scala.compat.java8.FunctionConverters._

val list = util.Arrays.asList(new A("1"))
list.sort(Comparator.comparing[A, String](((a: A) => a.getId).asJava))
list.stream().collect(Collectors.groupingBy[A, String](a => a.getId))

libraryDependencies += "org.scala-lang.modules" %% "scala-java8-compat" % "0.9.0"

How to use Java lambdas in Scala

票数 2
EN

Stack Overflow用户

发布于 2019-03-29 11:10:15

一个队列应该是这样的,按照id对列表进行排序,然后按id对它们进行分组,映射不是有序的数据结构,所以id的顺序可以是任意的。您可以做的是首先对它们进行分组,然后按键对Map排序,在本例中为id。

代码语言:javascript
复制
case class A(id:String)
val list = List(A("1"), A("2"), A("4"), A("3"))
list.sortBy(_.id).groupBy(_.id)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55415881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档