int[] a = {10, 20, 30, 40};
Stream.of(a).forEach(System.out::println);
对于这段代码,我期望输出(值):10 20 30 40
但它正在打印(参考):[I@6d86b085
我是否遗漏了流中的任何内容(或)任何更改?
您可以通过多种方式做到这一点。例如,您可以将 Stream.of
更改为
IntStream.of
,例如IntStream.of(a).forEach(System.out::println);
或者,您可以将
flatMap
应用于
Stream.of
,例如Stream.of(a).flatMap(x -> IntStream.of(x).boxed()).forEach(System.out::println);
或者,您可以使用
Arrays.stream
,例如
Arrays.stream(a).forEach(System.out::println);
我会推荐第一个或第三个,但我添加了第二个来演示您可以使其与
int[]
一起使用(只需记住
int[]
是 Object
)。[10, 20, 30, 40]
在一行中打印元素(如
Stream
)的一些方法,而不是在新行上打印每个元素。
使用 Instream.of
IntStream
, IntSream.mapToObj
创建元素的 String
表示流。
Stream.collect
收集到列表。我们将利用这样一个事实:打印
List
是以所需的格式完成的:System.out.println( IntStream.of(minSquaresSumArr)
.mapToObj(x -> String.valueOf(x))
.collect( Collectors.toList() ) ) ;
或者用
Arrays.stream()
System.out.println( Arrays.stream(minSquaresSumArr)
.mapToObj(x -> String.valueOf(x))
.collect( Collectors.toList() )) ;
我们还可以先将
IntStream
转换为
Stream
的 Integer
,然后使用 Integer.toSring
将其转换为 Stream
的
String
System.out.println( IntStream.of(minSquaresSumArr)
.boxed()
.map(x -> x.toString())
.collect( Collectors.joining(",") ) ) ;
使用 IntStream.collect
Stream.collect
来创建最终的字符串。输出是10 20 30 40
System.out.println( IntStream.of(minSquaresSumArr)
.collect( StringBuilder::new,
(x, y) -> { x.append(" ").append(y); return; },
(x, y) -> { x.append(" ").append(y); return; } )
.toString()) ;
如果您只想打印数组,Holger 的注释使用
System.out.println(Arrays.toString(a));
是实现这一目标的最简单方法。
Integer[] a = {10, 20, 30, 40};
Stream.of(a).forEach(System.out::println);