Найдите максимальное число из списка номеров строк, используя Java Streams - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь получить максимальное число из списка строк.

Мой код:

List<String> list = new ArrayList<String>();
list.add("00657");
list.add("00632");
list.add("00656");
list.add("01125");

Integer maxNum = list.stream()
                   .mapToInt(Integer::intValue)
                   .max();

Приведенный выше код дает ошибку. Ошибка: Некомпилируемый исходный код - Ошибочный тип символа: java .util.stream.Stream.mapToInt.max. В результате я должен получить 1125. Я пробовал разные способы, но ни один из них не работает.

Ответы [ 5 ]

13 голосов
/ 19 июня 2020

Вам нужно проанализировать String s как Integer s, что можно сделать, используя parseInt:

List<String> list = new ArrayList<>();
list.add("00657");
list.add("00632");
list.add("00656");
list.add("01125");

int maxNum = list.stream()
        .mapToInt(Integer::parseInt)
        .max()
        .orElse(-1);

Поскольку нет никаких гарантий, что ваш поток не будет пустым, это вот почему необходим orElse.

0 голосов
/ 19 июня 2020

@ Abdusoli mapToInt может отображать данные только типа int, поэтому вам нужно сначала проанализировать их в int, а конечный результат - OptionalInt, поэтому его следует преобразовать в Int. Вы можете попробовать оба способа

Первый подход

Integer maxNum = list.stream()
                .mapToInt(Integer::parseInt)
                .max()
                .getAsInt();
        System.out.println(maxNum);

Второй подход

Integer maxNum = list.stream()
                .map(Integer::parseInt)
                .mapToInt(Integer::intValue)
                .max().getAsInt();
        System.out.println(maxNum);
0 голосов
/ 19 июня 2020
   Integer maxNum = list.stream()
            .map(Integer::valueOf).mapToInt(v-> v)
            .max().orElseThrow(NoSuchElementException::new);

Вы можете попробовать это вместо замены intValue на valueOf

0 голосов
/ 19 июня 2020

intValue не является методом stati c, вместо него следует использовать Integer :: parseInt . Кроме того, max () return OptionalInt not Integer , вы можете использовать max (). GetAsInt (); или max () .orElse ();

Например,

Integer maxNum = list.stream().mapToInt(Integer::parseInt).max().getAsInt();
0 голосов
/ 19 июня 2020

mapToint не отображает какой-либо объект (например, String) в целое число. Он используется для сопоставления потоков типа Integer с потоком int.

Вам необходимо сначала сопоставить числа String с Integer, используя map с parseInt, а затем сопоставить Integer на int.

Используйте следующий фрагмент кода:

  Integer maxNum = list.stream()
                        .map(Integer::parseInt)
                        .mapToInt(Integer::intValue)
                       .max()
                       .getAsInt();

Надеюсь, это поможет!

...