【问题标题】:Mapreduce way to convert all elements of String[] to int[] in Java?Java中将String []的所有元素转换为int []的Mapreduce方法?
【发布时间】:2023-03-20 14:40:02
【问题描述】:

您可以将String 数组的所有元素转换为ints 并将它们存储在int 数组中,如下所示:

public static final void main(String[] args) {
    String input = "1 2 5 17 23 12 5 72 123 74 13 19 32";
    String[] strAr = input.split(" ");

    int[] output = parseIntArray(strAr);
}

private static int[] parseIntArray(String[] strAr) {
    // convert to int[] one by one
    int[] output = new int[strAr.length];
    for (int i = 0; i < strAr.length; i++) {
        output[i] = Integer.parseInt(strAr[i]);
    }

    return output;
}

如何在 Java 中以 map-reduce 方式编写 parseIntArray(String[]) 方法?

我听说在 Java 8 中有一种使用 lambdas 的简单方法。在 Java 8 之前是否还有一种 map-reduce 时尚的方法可以做到这一点?我知道这是合二为一的问题;但是我相信它们是如此密切相关,因此社区最好将这两个答案放在一个页面上。

【问题讨论】:

    标签: java lambda mapreduce string-conversion


    【解决方案1】:

    您可以在 Java 8 中使用 lambdas 来做到这一点

    private static int[] parseIntArray(String input) {
    
        return Arrays.asList(input.split(" "))
                .stream()
                .flatMapToInt(n-> IntStream.of(Integer.parseInt(n)) )
                .toArray();
    }
    

    我个人更喜欢 for 循环,我认为它更具可读性。

    在 Java 8 之前,您可以使用 rxJava 之类的东西并使用匿名类。

    【讨论】:

    • 虽然这样可行,但创建列表和 IntStream 效率有点低。
    • 是的,看到你的回答很棒。我对蒸汽没有太多用处,需要一些练习
    【解决方案2】:

    一种写法是:

    private static int[] parseIntArray(String[] strAr) {
      return Stream.of(strAr).mapToInt(Integer::parseInt).toArray();
    }
    

    你也可以直接从字符串开始:

    private static final Pattern splitOnSpace = Pattern.compile(" ");
    
    private static int[] parseIntArray(String str) {
      return splitOnSpace.splitAsStream(str).mapToInt(Integer::parseInt).toArray();
    }
    

    【讨论】:

    • 知道哪一个最有效吗?我认为它们在性能方面是相同的,但也许一个比另一个好一点?赞成。
    • 我怀疑后者会更好,因为模式是预编译的,但差异可能很小。
    【解决方案3】:

    另一个简单的命题:

    String input = "1 2 5 17 23 12 5 72 123 74 13 19 32";
    int[] numbers = Stream.of(input.split(" ")).mapToInt(Integer::parseInt).toArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-12
      • 2020-02-18
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多