在重构代码时
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()
是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();