java - lambda 表达式中的返回类型,Reduce 函数
问题描述
在静态方法中,我实现了内部类:
class Inner implements Comparable<Inner>
{
Integer v;
String s;
public Inner(Integer a, String st) {v = a; s= st; }
@Override
public int compareTo(Inner o) {
int result = Integer.compare(this.v,o.v);
if (result == 0)
return (String.CASE_INSENSITIVE_ORDER.compare(this.s,o.s));
else
return result;
}
}
它的目的是保存 String 和 Integer 值。另外类实现了 Comparable 接口,因此它是可排序的
Inner 类实例的主要容器是ArrayList
ArrayList<Inner> cont = new ArrayList<>();
填充动态数组后,我想对它和下一个 concat 字符串值进行排序,所有这些都使用 Streams。
String res = cont.stream().sorted(Inner::compareTo).reduce(" ",(String r, Inner e)->{return r+=e.s+" ";});
不幸的是,编译器向我发送错误:
Bad return type in lambda expression: String cannot be converted to Inner
有什么办法可以解决它,仍然使用 Streams?
问候
解决方案
你应该在减少之前使用s
of 。最好 用分隔符连接字符串Inner
.map()
Collectors.joining
cont.stream().sorted(Inner::compareTo).map(e -> e.s).collect(Collectors.joining(" "));