<运营商>未定义参数类型int,Stream <integer>

时间:2016-09-05 06:14:56

标签: java java-8

重构此代码

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>

如何解决?

2 个答案:

答案 0 :(得分:4)

试试这个:

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

甚至更短:

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

(这可能是一场胜利&#34;排序&#34;表现明智)

并提示:即使只是一个例子:使用&#34; s&#34;,&#34; st&#34;和&#34; str&#34;等名称。只是让你的读者感到困惑。不要这样做。如初。

答案 1 :(得分:1)

您获得的错误是不言自明的 - 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();