运算符 > 未定义参数类型 int、Stream<Integer>



在重构代码时

for (String s : str) {
    for (String st : str) {
        if (st.length() > s.length()) {
            System.out.println(st + " " + st.length());
        }
    }
    break;
}

变为函数式,使用下面的语句

names.filter(t -> t.length() > names.map(x -> x.length())).findFirst().toString();

我得到一个编译时错误:

对于参数类型int, Stream<Integer>

,操作符>没有定义

如何解决?

试试这个:

someStrings.stream().max((s1, s2) -> Integer.compare(s1.length(), s2.length())).get()

或更短:

someStrings.stream().max(Comparator.comparingInt(String::length)).get()

(这可能比"排序"性能要好)

提示:即使它只是一个例子:使用像"s","st"one_answers"str"这样的名字只会让你的读者感到困惑。不要那样做。div。

您得到的错误是不言自明的- t.length()intnames.map(x -> x.length())Stream<Integer>。不能对intStream<Integer>应用>运算符。

要找到最长的String,您可以按长度降序对String s进行排序,并从排序后的Stream中取第一个元素:

String longest = names.sorted((a, b) -> Integer.compare(b.length(), a.length()))
                      .findFirst()
                      .get();

最新更新