Arrays.asList(arr)
возвращает List<int[]>
, единственным элементом которого является arr
.Поэтому потоковая передача этого List
и последующее сопоставление этого отдельного элемента с String.valueOf(x)
и сбор с помощью Collectors.joining(",")
приведут к String
, значением которого является toString()
этого единственного массива, то есть вывод, который вы видите.
String output = Arrays.asList(arr) // List<int[]>
.stream() // Stream<int[]>
.map(x -> String.valueOf(x)) // Stream<String> having a single element - "[I@776ec8df"
.collect(Collectors.joining(",")); // "[I@776ec8df"
Когда вы создаете IntStream
из массива int
, вы получаете поток отдельных элементов (значения int
), поэтому вы можете их упаковать, затем преобразовать в String
s и присоединитьсячтобы получить желаемый результат.
Вы можете заставить свой первый фрагмент работать, если вы измените:
int arr[] = new int[] {10,1,56,8,78,0,12};
на:
Integer arr[] = new Integer[] {10,1,56,8,78,0,12};
с тех пор Arrays.asList(arr)
создаст List<Integer>
, содержащий все элементы входного массива.