繁体   English   中英

使用 Java Streams 从字符串数列表中查找最大数

[英]Find Max number from List of String numbers using Java Streams

我正在尝试获取字符串列表中的最大数量。

我的代码是:

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 我尝试了不同的方法,但没有一个有效。

您需要将String解析为Integer ,这可以使用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);

因为不能保证您的 stream 不会为空,这就是需要orElse的原因。

mapToint不会 map 任何 object(例如String )到 integer。 它用于 map Integer类型流到int stream。

You need to first map the String numbers to Integer using map with parseInt and then map the Integer to int .

使用以下代码:

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

希望这可以帮助!

@Abdusoli mapToInt 可以 map 仅 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);

intValue不是 static 方法,您应该使用Integer::parseInt代替。 此外, max()返回OptionalInt而不是Integer ,您可以使用max().getAsInt(); max().orElse();

Integer maxNum = list.stream().mapToInt(Integer::parseInt).max().getAsInt();
   Integer maxNum = list.stream()
            .map(Integer::valueOf).mapToInt(v-> v)
            .max().orElseThrow(NoSuchElementException::new);

你可以试试这个,而不是把 intValue 改为 valueOf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM