-3

我正在尝试打印一个包含 String 和 Integer 元素的 concat Stream。我尝试了几种方法,但没有一种方法有效。我在互联网上找不到合适的方法。如您所见,这只是一个测试代码:

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);
    }
}

我知道 part5 是一个整数,所以我不能以常规方式连接它,所以我也尝试了:

        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);
    }
}

这些都不起作用。有没有办法做到这一点?提前致谢。

4

2 回答 2

1

如果我理解正确并且你想创建一个组合流字符串,你可以使用类似的东西:

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);

或者

流.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);
于 2022-02-24T12:25:19.567 回答
0

我正在尝试打印一个包含 String 和 Integer 元素的 concat Stream

错了,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)
                )
            )
        )
    );

To get the result of the string concatenation as String, a terminal operation `Stream.collect(Collectors.joining())` should be applied after mapping all the objects in the streams into String using `String::valueOf` (or `Objects::toString`):
```java
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可以使用 s连接 s Stream.of + Stream::flatMap。在下面的示例中,IntStream立即映射到 String,因此不需要额外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.
于 2022-02-24T15:52:58.950 回答