如何在 Java 中使用 Stream 打印“int[]”的各个元素?

问题描述 投票:0回答:3
    int[] a = {10, 20, 30, 40};
    Stream.of(a).forEach(System.out::println);
    

对于这段代码,我期望输出(值):10 20 30 40
但它正在打印(参考):[I@6d86b085

我是否遗漏了流中的任何内容(或)任何更改?

java arrays foreach printing java-stream
3个回答
3
投票

您可以通过多种方式做到这一点。例如,您可以将 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
)。
    


0
投票
[10, 20, 30, 40]

在一行中打印元素(如

Stream
)的一些方法,而不是在新行上打印每个元素。

使用
    Instream.of
  1. 创建
    IntStream
    IntSream.mapToObj
    创建元素的
    String
    表示流。
    
    
  2. 最终使用
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
  1. 方法而不是
    Stream.collect
    来创建最终的字符串。输出是
    10 20 30 40
    
    
  2. 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));

是实现这一目标的最简单方法。

    


-1
投票

Integer[] a = {10, 20, 30, 40}; Stream.of(a).forEach(System.out::println);

© www.soinside.com 2019 - 2024. All rights reserved.