筛选大字符串

时间:2019-04-01 10:17:07

标签: java java-stream

我有一个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];
    }
}

4 个答案:

答案 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