【问题标题】:Return type in lambda expression, Reduce functionlambda 表达式中的返回类型,Reduce 函数
【发布时间】:2021-01-31 18:52:42
【问题描述】:

在静态方法中我实现了内部类:

 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<>();

填充动态数组后,我想对其进行排序并下一个连接字符串值,所有这些都使用 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 吗?

问候

【问题讨论】:

  • "在静态方法中我已经实现了内部类" --- 什么静态方法? Inner 类不在方法内部,localanonymous 类在。

标签: java lambda stream reduce


【解决方案1】:

您应该在减少之前使用.map() 获取Inners。而且最好用Collectors.joining来加入带分隔符的字符串

cont.stream().sorted(Inner::compareTo).map(e -> e.s).collect(Collectors.joining(" "));

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 2014-08-06
    • 2018-10-09
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多