【问题标题】:Is that good way to add a list to another list, fill default value if have no value from source list这是将列表添加到另一个列表的好方法吗,如果源列表中没有值,则填充默认值
【发布时间】:2019-08-03 16:33:26
【问题描述】:

我有两个容量为 20 和 10 的列表字符串。

int maxCapacity = 20;
List<String> k = new ArrayList<>(maxCapacity);
List<String> s = new ArrayList<>(10);
for (int i = 0; i < 10; i++) {
    s.add(new String("X"));
}
s.stream().collect(Collectors.toCollection(() -> k));

我想将默认值添加到 K 中,索引从 10 -> 19,因为 S 的大小小于 K,所以只够从 0 -> 9 填充 K。

我可以通过添加一个循环来做到这一点,但看起来不太好:

for (int i = s.size(); i < maxCapacity; i++) {
    k.add("default");
}

这样简单吗?例如使用流 java 8 等。 谢谢。

【问题讨论】:

  • 所以为了澄清你想让 k 有 {0, 1, 2... 9, "default", "default"...}?
  • 传递给toCollection 的供应商应在每次评估时创建一个新集合。根据定义,返回现有集合已损坏。除此之外,不要使用new String("X")。只需使用"X"

标签: java arraylist collections java-8 java-stream


【解决方案1】:

一个更简单的方法可能是:

k.addAll(s);
IntStream.range(s.size(), maxCapacity).forEach(i -> k.add(i, "default"));

【讨论】:

  • 顺便说一句,这些初始化使用initialCapacity 并且不控制列表的大小。因此,希望您能确保问题中提出的列表的大小。
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多