如何在scala中使用java8 lambda和函数

如何在scala中使用java8 lambda和函数,scala,java-8,Scala,Java 8,我有这样一个代码: public class A { private String id; //constructor, getter, setter } 在java中,我可以使用: public class C { @Test public void t() { List<A> list = Arrays.asList(new A("1")); list.sort(Comparator.comparing(A:

我有这样一个代码:

public class A {

    private String id;
    //constructor, getter, setter

}
在java中,我可以使用:

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测试中,
list.sort(Comparator.comparing(a=>a.getId))
将得到两个错误:

  • 错误:(21,26)推断的类型参数[com.test.A,?0]不符合方法的类型参数界限[T,U:U]]

  • 错误:(21,38)类型不匹配; 找到:java.util.function.function[com.test.A,String] 必需:java.util.function.function[\u>:T,\uA.getId))将获得以下错误:

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

  • 如何使用它?

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

    case class A(id:String)
    val list = List(A("1"), A("2"), A("4"), A("3"))
    list.sortBy(_.id).groupBy(_.id)
    
    试一试

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


    list.sortBy(u.id).groupBy(u.id)这有什么问题?我只想通过JavaUTILLITE来完成它,但是如何在GROMPBY之后转换成java. UTILMAP。我希望你已经听说过在装饰包中的JavaCon Valor,你会得到一个java的方法,所以我会转换成Java MaYes,但是我觉得做多转换是不方便的。s、 list->asScala->asJava…1.提供准确的错误消息;2.您使用的是Scala 2.12吗?3.您使用的是Scala
    list
    还是Scala中的Java one?是的,它对我有用。我不知道为什么
    sort
    need
    asJava
    groupingBy
    不需要它?通常在2.12中您不需要
    .asJava
    e编译器很困惑,我们帮了忙。我有点理解,非常感谢。
    case class A(id:String)
    val list = List(A("1"), A("2"), A("4"), A("3"))
    list.sortBy(_.id).groupBy(_.id)
    
    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))