我有一个String数组,任务是找出数组中最长的字符串以及该字符串的位置,我想知道是否可以将数组转换为list并使用流可以解决相同的问题。任何帮助将不胜感激
我已经使用传统方式,使用循环和某些if条件解决了问题
String names[]={"John","Malisa","Stack Overflow"};
String b=names[i];
int max=a[i].length();
for(int i=1;i<names.length;i++) {
if(max<names[i].length) {
max=names[i].length;
b=names[i];
}
}
答案 0 :(得分:3)
您不需要filter
方法来查找数组中最长的字符串。将max
与比较器一起使用:
String max = Arrays.stream(names)
.max(Comparator.comparingInt(String::length))
.orElse("");
要找到此元素的索引,请使用:
int index = Arrays.asList(names).indexOf(max);
答案 1 :(得分:0)
您可以使用Arrays.stream
并比较长度:
String names[]={"John","Malisa","Stack Overflow"};
Optional<String> max = Arrays.stream(names)
.max(Comparator.comparingInt(String::length));
System.out.println(max.orElse("none"));
UPD 我无法正确理解您的问题。 您可以使用以下代码获取max元素的索引:
String names[]={"John","Malisa","Stack Overflow"};
int index = IntStream.range(0, names.length)
.reduce((i, j) -> names[i].length() > names[j].length() ? i : j)
.getAsInt();
System.out.println(index);
答案 2 :(得分:0)
只需使用:-
Arrays.stream(names)
.sorted(Comparator.comparing(String::length,Comparator.reverseOrder()))
.findFirst()
.get()
答案 3 :(得分:0)
这是另一种同时获取最长字符串及其索引的方法:
String[] names = {"John", "Malisa", "Stack Overflow"};
Optional<Map.Entry<String, Integer>> result = IntStream.range(0, names.length).boxed()
.collect(Collectors.toMap(i -> names[i], Function.identity()))
.entrySet().stream()
.max(Comparator.comparing(e -> e.getKey().length()));
result.ifPresent(e -> System.out.println("Longest String: '" + e.getKey() + "' at index " + e.getValue()));
这将创建一个包含字符串及其索引的地图。之后,它将返回具有最长字符串的条目。
您的names
数组的结果是:
Longest String: 'Stack Overflow' at index 2