【发布时间】:2019-08-20 07:16:41
【问题描述】:
我有这样的代码:
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(2.12) 测试:
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)) 会得到两个错误:
错误:(21, 26) 推断类型参数 [com.test.A,?0] 不符合方法比较的类型参数边界 [T,U <: comparable>: U]]
错误:(21, 38) 类型不匹配; 找到:java.util.function.Function[com.test.A,String] 必需:java.util.function.Function[_ >: T, _ <: u>
而list.stream().collect(Collectors.groupingBy(a => a.getId)) 会得到这个错误:
- 错误:(22, 49) 缺少参数类型
我该如何使用它?
【问题讨论】:
-
list.sortBy(_.id).groupBy(_.id) 这有什么问题?
-
我只考虑通过java.util.List的方式完成,但是groupBy之后如何转换成java.util.Map
。 -
我希望你听说过 Decorate 包中的 javaConvertors,你会得到一个 asJava 方法,所以我会转换成 java Map
-
是的,我知道,但是我觉得不方便进行多次转换。列表 -> asScala -> asJava ...
-
1.提供准确的错误信息; 2. 你使用的是 Scala 2.12 吗? 3.你在Scala中使用的是Scala
List还是Java?