在 Java 上连接不同的 Stream 并打印

问题描述 投票:0回答:2

我正在尝试打印一个包含字符串和整数元素的连续流。我尝试了几种方法,但没有一个有效。我在互联网上找不到正确的方法。正如您所看到的,这只是一个测试代码:

import java.util.stream.*;
class testconcat{
    public static void main(String[] args){
        Stream<String> part1=Stream.of("Testing the ");
        Stream<String> part2=Stream.of("streams concat");
        Stream<String> part3=Stream.of(" on Java, dividing ");
        Stream<String> part4=Stream.of("this phrase in ");
        IntStream part5=IntStream.of(6);
        Stream<String> part6=Stream.of(" parts.");

        String phrase=Stream.concat(Stream.concat(Stream.concat(Stream.concat(Stream.concat(part1, part2), part3), part4), part5), part6);
        System.out.println(phrase);
    }
}

我知道第5部分是一个整数,所以我不能以常规方式连接它,所以我也尝试过:

        IntStream part5=IntStream.of(6);
        Stream<String> part6=Stream.of(" parts.");

        String phrase=Stream.concat(IntStream.concat(Stream.concat(Stream.concat(Stream.concat(part1, part2), part3), part4), part5), part6);
        System.out.println(phrase);
    }
}

还有:

        Integer part5=6;
        String part6=(" parts.");

        String phrase=Stream.concat(Stream.concat(Stream.concat(Stream.concat(Stream.concat(part1, part2), part3), part4);
        System.out.println(phrase + Integer.toString(part5) + part6);
    }
}

这些都不起作用。有办法做到这一点吗?预先感谢。

java stream concatenation println intstream
2个回答
0
投票

我正在尝试打印一个包含字符串和整数元素的连续流

错误,IntStream 是原始

int
值的特定流,它与 Stream 不同,因此必须调用
IntStream::boxed
IntStream::mapToObj
来生成
Stream<?>
,可以在
Stream::concat

Stream<?> many = Stream
    .concat(part1, Stream
        .concat(part2, Stream
            .concat(part3, Stream
                .concat(part4, Stream
                    .concat(part5.boxed(), part6)
                )
            )
        )
    );

要将字符串串联的结果作为 String 获得,应在使用

Stream.collect(Collectors.joining())
(或
String::valueOf
)将流中的所有对象映射到 String 后应用终端操作
Objects::toString

String result = many.map(String::valueOf).collect(Collectors.joining());
System.out.println(result);
// -> Testing the streams concat on Java, dividing this phrase in 6 parts.

但是,这种冗长的流连接是多余的,可以使用

Stream
连接
Stream.of + Stream::flatMap
。 在下面的示例中,
IntStream
立即映射到字符串,因此不需要额外的
Stream::map

Stream<String> many = Stream
    .of(part1, part2, part3, part4, part5.mapToObj(String::valueOf), part6)
    .flatMap(s -> s);

String res = many.collect(Collectors.joining());
System.out.println(res);
// -> Testing the streams concat on Java, dividing this phrase in 6 parts.

0
投票

如果我理解正确并且您想创建组合流字符串,您可以使用类似以下内容:

Stream.concat(...):

Stream<Integer> integerStream = IntStream.range(72, 129).boxed(); // to convert to Stream<Integer>
Stream<String> stringStream =Stream.of(" String Stream");
String str = Stream.concat(integerStream.map(String::valueOf), stringStream).collect(Collectors.joining(","));
System.out.println(str);

或者

Stream.of(...)

Stream<Integer> integerStream = IntStream.range(72, 129).boxed(); // to convert to Stream<Integer>
Stream<String> stringStream =Stream.of(" String Stream");
String str = Stream.of(integerStream.map(String::valueOf), stringStream).flatMap(t -> t).collect(Collectors.joining(","));
        System.out.println(str);
© www.soinside.com 2019 - 2024. All rights reserved.