gpt4 book ai didi

java - 当 n > 列表索引-1 时,使用默认值打印字符串列表中前 n 个元素的计数器和字符串

转载 作者:行者123 更新时间:2023-12-02 01:05:44 26 4
gpt4 key购买 nike

我目前正在尝试使用 Java 8 中的流,并通过重写一些代码,我发现了以下情况。

  • 我有一个具有动态大小的字符串列表。
  • 我想打印出列表的前五个字符串,或 - 作为如果列表大小小于,则所有剩余条目的默认值五。
  • 打印的消息需要包含当前字符串的计数器。

例如以下列表:

List<String> strings = Arrays.asList("one", "two");

应该打印出:

1: one
2: two
3: -
4: -
5: -

到目前为止,我想出了以下解决方案:

// Iterating over the existing entries
int i = 1;
for (String string : strings) {
System.out.println(i++ + ": " + string);
}

// Printing the default lines for all missing ones
IntStream.rangeClosed(i, 5).forEach(n -> System.out.println(n + ": -"));

不知怎的,它感觉不太干净,因为我以同样的方式使用了System.out::println两次。有没有一种更清晰的方法可以重写它,将所有内容都放在一个流中?

最佳答案

怎么样

IntStream.range(0, 5)
.mapToObj(i -> String.format("%d: %s", i + 1, i < strings.size() ? strings.get(i) : "-"))
.forEach(System.out::println);

这是在一个“循环”中完成此操作的最优雅的方式。

无论数组的长度如何,行数始终为 5。我们也不能只流式传输元素,因为我们还需要索引。因此,正如您已经发现的那样,strings.stream() 将不起作用。

我们使用 IntStream::range 来代替,以提供五个整数的使用。然后,我们将每个整数映射到相应的元素,如果超出范围,则将其映射到 - 。最后我们使用方法引用打印整个内容。

<小时/>

我个人更喜欢使用原始索引(0 到 4)而不是基于 1 的索引(1 到 5)。因此,使用 range(0, 5) 而不是 range(1, 6)rangeClosed(1, 5)

关于java - 当 n > 列表索引-1 时,使用默认值打印字符串列表中前 n 个元素的计数器和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60085102/

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