当前位置: 首页 > 知识库问答 >
问题:

java Streams:收集可迭代[重复]

耿志义
2023-03-14

我收到一个编译错误:

@Override
public Map<String, T> loadAll(Iterable<? extends String> keys) {
    return Stream.of(keys)
      .collect(Collectors.toMap(Function.identity(), this::load));
}

共有1个答案

夔修伟
2023-03-14

似乎您认为stream.of(keys)会创建一个,但事实并非如此。若要从迭代创建,应使用streamsupport#stream:

public Map<String, T> loadAll(Iterable<? extends String> keys) {
    return StreamSupport.stream(keys.spliterator(), false)
                        .collect(Collectors.toMap(Function.identity(), this::load));
}

这假设您的load方法返回t

 类似资料:
  • 在我的应用程序中,我需要数组1的给定大小k的所有子集。。n 这可以使用递归方法轻松完成,并存储沿途找到的所有子集。然而,我不希望我的应用程序使用指数级的内存量[O(n^k)]。 因此,我想编写一个实现(Java)的类来迭代所述子集。 所以我可以如下使用它: 显然,我们需要存储最后返回的当前子集,它被初始化为1... k。但是如何从这个当前子集计算下一个子集呢?

  • 继承一个迭代器()方法以生成一个。 但是我需要一个而不是。 例如,给定以下字符串: ...我需要将字符串的这些部分作为传递给特定的库。调用会产生一个。因此,如果我可以将该转换为其元素的,我会设置。

  • 当一个对象实现了属性时,我们认为它是可迭代的。 一些内置的类型如Array,Map,Set,String,Int32Array,Uint32Array等都已经实现了各自的Symbol.iterator。 对象上的Symbol.iterator函数负责返回供迭代的值。 for..of 语句 for..of会遍历可迭代的对象,调用对象上的Symbol.iterator属性。 下面是在数组上使用for.

  • 那么,为什么在第一个示例中这是有效的呢?

  • 问题内容: 我可以在Python中重置迭代器/生成器吗?我正在使用DictReader,并希望将其重置为文件的开头。 问题答案: 我看到很多建议itertools.tee的答案,但这忽略了文档中的一项重要警告: 此itertool可能需要大量辅助存储(取决于需要存储多少临时数据)。一般来说,如果一个迭代器使用大部分或全部的数据的另一个前开始迭代器,它是更快地使用代替。 基本上,是专为那些在两个(或