我有一个第三方图书馆给我一个图书馆Enumeration<String>
。我想像Java
8那样懒惰地使用该枚举,并Stream
调用诸如此类的东西。filter``map``flatMap
有没有现成的图书馆?我已经在引用Guava和Apache Commons,所以如果其中任何一个都有理想的解决方案。
另外,在保留所有内容的懒惰性质的同时将Enumeration
a 变成最佳/最简单的方法Stream
是什么?
这个答案已经提供了一个解决方案,可以解决Stream
以下问题Enumeration
:
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); }
应当强调的是,由此而来Stream
的
懒任何其他Stream
的,因为它不会处理任何物品的终端动作已经开始之前,如果终端操作是短路,它会遍历只有尽可能多的项目是必要的。
尽管如此,它仍有改进的空间。forEachRemaining
当有一种直接处理所有元素的方法时,我总是会添加一个方法。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();
}
public void forEachRemaining(Consumer<? super T> action) {
while(e.hasMoreElements()) action.accept(e.nextElement());
}
},
Spliterator.ORDERED), false);
}
但是,上面的代码是“使用,Iterator
因为它非常熟悉”反模式的受害者。创建的Iterator
将被包装到新Spliterator
接口的实现中,与Spliterator
直接实现相比,没有任何优势:
public static <T> Stream<T> enumerationAsStream(Enumeration<T> e) {
return StreamSupport.stream(
new Spliterators.AbstractSpliterator<T>(Long.MAX_VALUE, Spliterator.ORDERED) {
public boolean tryAdvance(Consumer<? super T> action) {
if(e.hasMoreElements()) {
action.accept(e.nextElement());
return true;
}
return false;
}
public void forEachRemaining(Consumer<? super T> action) {
while(e.hasMoreElements()) action.accept(e.nextElement());
}
}, false);
}
在源代码级别上,此实现与Iterator
基于-
一样简单,但是消除了从Spliterator
到的委派Iterator
。它仅要求其读者学习新的API。
问题内容: 我有一个第三方图书馆给我一个图书馆。我想像Java 8那样懒惰地使用该枚举,并调用诸如此类的东西。 有没有现成的图书馆?我已经在引用Guava和Apache Commons,所以如果其中任何一个都有理想的解决方案。 另外,在保留所有内容的懒惰性质的同时将a 变成最佳/最简单的方法是什么? 问题答案: 这个答案已经提供了一个解决方案,可以解决以下问题: 应当强调的是,由此而来 的 懒任何
问题内容: 我有一些Java代码,我想将其翻译为C#。srcParams是一个哈希表。 这是Java代码: 这是我在C#中的尝试 你能告诉我是否正确吗? 问题答案: 您所拥有的几乎可以了,只需重命名变量并添加的使用即可:
问题内容: 给定以下枚举,将Int强制转换为Java中的枚举的正确方法是什么? 问题答案: 尝试在必须为or的地方,即该枚举的有效序数。 请注意,在Java中,枚举实际上是类(因此,枚举值是对象),因此您不能将an 甚至转换为枚举。
问题内容: 我有一个返回int类型的函数。但是,我只有TAX枚举的值。 如何将TAX枚举值转换为整数? 问题答案: 您需要以某种方式使枚举公开,例如 (顺便说一句,我将名称更改为更常规和易读。) 这是 假设 您要在构造函数中分配值。如果这不是您想要的,则需要向我们提供更多信息。
本文向大家介绍Java将枚举转换为字符串,包括了Java将枚举转换为字符串的使用技巧和注意事项,需要的朋友参考一下 示例 有时您想将枚举转换为String,有两种方法可以实现。 假设我们有: 那么,我们如何将类似的东西转换Fruit.APPLE为"APPLE"? 使用转换 name() name()是一个内部方法,enum该方法返回String枚举的表示形式,返回值精确String表示枚举值的定义
我有枚举类,我想向列表视图显示枚举数据。谁能说出如何做到这一点?