问题描述
在静态方法中,我已经实现了内部类:
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接口,以便可排序
内部类实例的主要容器是 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
来取Inner
中的.map()
。最好使用Collectors.joining
将字符串与定界符连接起来
cont.stream().sorted(Inner::compareTo).map(e -> e.s).collect(Collectors.joining(" "));