在字符串数组中找到最大整数的最佳方法?

mem*_*und 4 java java-8 java-stream

String[] array = new String[] {"1", "2", "3", "25"};
Run Code Online (Sandbox Code Playgroud)

我想找到该字符串中的最大数字并将其作为一个返回integer.

什么是最好的方法,特别是在性能方面,因为我必须解析几百万行?

我能想到的两个解决方案:

Arrays.stream(array).mapToInt(Integer::parseInt).max().orElse(0);
Integer.valueOf(Collections.max(Arrays.asList(array))); //.max returns 0 when empty array
Run Code Online (Sandbox Code Playgroud)

Ale*_*you 5

假设呈现为Strings的整数都是非负数且没有尾随零,则在搜索期间不需要解析它们.使用自定义比较器,首先按长度比较字符串,然后按值比较:

import static java.util.Comparator.*;
//...

String[] s = {"1", "2", "3", "25"};
Optional<String> max = Stream.of(s).max(comparingInt(String::length).thenComparing(naturalOrder()));
int maxInt = Integer.parseInt(max.get());
Run Code Online (Sandbox Code Playgroud)

  • @membersound在import块中添加`import static java.util.Comparator.*;`或使用`Comparator.comparingInt()`和`Comparator.naturalOrder()` (3认同)
  • 你可以使它更优雅:`.max(comparisonInt(String :: length).thenComparing(naturalOrder()))` (2认同)