重构此代码
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>
如何解决?
答案 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()
是int
而names.map(x -> x.length())
是Stream<Integer>
。您无法将>
运算符应用于int
和Stream<Integer>
。
要查找最长String
,您可以按降序排列String
s,并从排序后的Stream
中获取第一个元素:
String longest = names.sorted((a, b) -> Integer.compare(b.length(), a.length()))
.findFirst()
.get();