Фильтровать большую строку - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть массив строк, и задача состоит в том, чтобы найти самую длинную строку в массиве и расположение этой строки. Мне интересно, могу ли я преобразовать массив в список, и с помощью потока я могу решить ту же проблему,Буду признателен за любую помощь

Ответы [ 4 ]

3 голосов
/ 01 апреля 2019

Вам не нужен метод filter, чтобы найти самую длинную строку в массиве.Используйте max с компаратором:

String max = Arrays.stream(names)
        .max(Comparator.comparingInt(String::length))
        .orElse("");

Чтобы найти индекс этого элемента, используйте:

int index = Arrays.asList(names).indexOf(max);
0 голосов
/ 01 апреля 2019

Вот другой подход для получения самой длинной строки и ее индекса одновременно:

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
0 голосов
/ 01 апреля 2019

Просто используйте: -

Arrays.stream(names)
       .sorted(Comparator.comparing(String::length,Comparator.reverseOrder()))
       .findFirst()
       .get()
0 голосов
/ 01 апреля 2019

Вы можете использовать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...