java - 使用普通 JAVA Stream 收集 int 数组的值

标签 java arrays java-8 java-stream

在我的程序中,我尝试使用流打印排序的 int 数组。但是我在使用普通流时得到错误的输出。使用 int 流时会打印正确的详细信息。

有关详细信息,请参阅下面的核心代码段。

package com.test.sort.bubblesort;

import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class BubbleSortWithRecursion {

    public static void bubbleSort(int[] arr, int n) {

        if (n < 2) {
            return;
        }

        int prevValue;
        int nextValue;
        for (int index = 0; index < n-1; index++) {
            prevValue = arr[index];
            nextValue = arr[index+1];

            if  (prevValue > nextValue) {
                arr[index] = nextValue;
                arr[index+1] = prevValue;
            }
        }

        bubbleSort(arr, n-1);
    }

    public static void main(String[] args) {
        int arr[] = new int[] {10,1,56,8,78,0,12};
        bubbleSort(arr, arr.length);

        **//False Output** :  [I@776ec8df
        String output = Arrays.asList(arr)
            .stream()
            .map(x -> String.valueOf(x))
            .collect(Collectors.joining(","));

        System.out.println(output);

        //Correct Output : 0,1,8,10,12,56,78
        String output2 = IntStream
            .of(arr)
            .boxed()
            .map(x -> Integer.toString(x))
            .collect(Collectors.joining(","));

        System.out.println(output2);

    }


}

我在控制台上得到以下输出:

[I@776ec8df
0,1,8,10,12,56,78

第一行输出是使用不正确的普通 java 流生成的。

为什么我使用普通的 JAVA 流得到虚假内容?我在这里遗漏了什么吗?

最佳答案

您可以这样解决您的问题:

String output = Arrays.stream(arr)
        .boxed()
        .map(String::valueOf)
        .collect(Collectors.joining(",")); // 0,1,8,10,12,56,78

解释发生了什么:

当你使用 Arrays.asList() 时:

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

它采用 T 类型的可变参数,在您的情况下,您将它用于 int[] 对象,因此 Arrays.asList() 将返回 int[]List 而不是整数流,因此您必须使用如下所示的 Arrays.stream :

public static IntStream stream(int[] array) {
    return stream(array, 0, array.length);
}

获取正确的数据。

关于java - 使用普通 JAVA Stream 收集 int 数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55321714/

相关文章:

java - 来自其他类的空结果语句

arrays - 当所有跳跃的长度相同并且某些位置无法降落时,我可以通过一个范围移动的最小跳跃是多少?

java - 在 Java 8 中没有获得正确的时区?

java - 从 Java 对象创建流的最简单方法?

java - 使用 Java 8 中的泛型方法对集合进行排序

java - 如何通过java代码连接sql server?

Java8 lambda 顺序或管道字符串转换

java - 异常在线程 "main": java. lang.error

c++ - 根据 C++ 的规则,它是合法的吗?

在 C 中将一个 int 转换为一个 4 字节的 char 数组