gpt4 book ai didi

Java 8 按顺序生成唯一的数字对

转载 作者:行者123 更新时间:2023-11-30 06:16:06 24 4
gpt4 key购买 nike

我开发了可以生成唯一数字对的代码并且运行良好

   Stream<String> stream = IntStream.range(0, 5).boxed().flatMap(a -> IntStream.range(0, 5).mapToObj(b -> a + ":" + b).distinct());
stream.forEach(System.out::println);

输出

0:0
0:1
0:2
0:3
0:4
1:0
1:1
1:2
1:3
1:4
2:0
2:1
2:2
2:3
2:4
3:0
3:1
3:2
3:3
3:4
4:0
4:1
4:2
4:3
4:4

但是如何生成对以使输出看起来像

0:0
0:1
1:0
1:1
0:2
2:0
1:2
2:1
2:2
0:3
3:0
3:1
1:3
2:3
3:2
3:3
0:4
4:0
1:4
4:1
2:4
4:2
3:4
4:3
4:4

我的想法不是先用 0 生成所有对,然后用 1 等等,我想生成像 x:x x 这样的对:y y:x y:y 等等。请仅在 Java8 中提供答案,因为对于 java < 8 ,我可以轻松编写 for 循环并实现它。谢谢

最佳答案

如果您需要不同的顺序,您可以在生成它们时对它们进行排序。

一种方法可能是生成所有 id,直到 0,1,2,3,4 等。

这个解决方案符合给定的顺序

// 0 to 5-1 boxed so we can flatMap IntStream to Stream<String> later.
IntStream.range(0, 5).boxed()
// generate pairs of ?::n and n::? or only one if the same.
.flatMap(n -> IntStream.rangeClosed(0, n).boxed()
// generate the pair, dropping duplicates.
.flatMap(m -> Stream.of(m + ":" + n, n + ":" + m).distinct())
// print the results.
).forEach(System.out::println);

使用 import static 它可能看起来像这样。

range(0, 5).boxed().flatMap(n -> range(0, n+1).boxed().flatMap(m -> of(m + ":" + n, n + ":" + m).distinct())) .forEach(out::println);

打印

0:0
0:1
1:0
1:1
0:2
2:0
1:2
2:1
2:2
0:3
3:0
1:3
3:1
2:3
3:2
3:3
0:4
4:0
1:4
4:1
2:4
4:2
3:4
4:3
4:4

这会产生以不同方式表述的需求。

// numbers 0 to 5-1
IntStream.range(0, 5)
// make them boxed so we can do a flatMap to a Stream<String> later.
// IntStream can't flapMap to a stream of Objects.
.boxed()
// create two streams of ?::n and n::?
.flatMap(n -> Stream.of(
// stream is 0 .. n-1 to avoid duplicate n with next stream.
// generate ?::n
IntStream.range(0, n).mapToObj(m -> m + ":" + n),
// stream is 0 .. n of n::?
IntStream.rangeClosed(0, n).mapToObj(m -> n + ":" + m)
// combine the two streams into one so that stream can be flatMappped.
).flatMap(s -> s))
// print the results.
.forEach(System.out::println);

打印

0:0
0:1
1:0
1:1
0:2
1:2
2:0
2:1
2:2
0:3
1:3
2:3
3:0
3:1
3:2
3:3
0:4
1:4
2:4
3:4
4:0
4:1
4:2
4:3
4:4

关于Java 8 按顺序生成唯一的数字对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27885225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com