在Java 8中迭代枚举

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

是否可以Enumeration通过使用Lambda Expression 来迭代?下面的代码片段的Lambda表示是什么:

Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();

while (nets.hasMoreElements()) {
    NetworkInterface networkInterface = nets.nextElement();

}

我没有发现任何流。

提问于
用户回答回答于

可以将元素从枚举中复制到ArrayListCollections.list然后像使用它一样

Collections.list(yourEnumeration).forEach(yourAction);
用户回答回答于

如果代码中有很多枚举,我建议创建一个静态帮助器方法,将Enumeration转换为Stream。静态方法可能如下所示:

public static <T> Stream<T> enumerationAsStream(Enumeration<T> e) {
    return StreamSupport.stream(
        Spliterators.spliteratorUnknownSize(
            new Iterator<T>() {
                public T next() {
                    return e.nextElement();
                }
                public boolean hasNext() {
                    return e.hasMoreElements();
                }
            },
            Spliterator.ORDERED), false);
}

使用静态导入的方法。与Holger的解决方案相反,您可以从不同的操作中受益,这可能会使现有代码更简单。这里是一个例子:

Map<...> map = enumerationAsStream(enumeration)
    .filter(Objects::nonNull)
    .collect(groupingBy(...));

扫码关注云+社区