假设我有一个Iterator<Class1>
对象。 Class1
提供了一个返回stringFunction()
的方法String
。
有没有办法在迭代器返回的每个String.join
上调用stringFunction()
的方式使用Class1
,并连接由分隔符分隔的函数结果?
String.join
重载需要Iterable<CharSequence>
;是否可以从Iterator<Class1>
和stringFunction
创建一个,以便join
可以使用它?
答案 0 :(得分:6)
如何使用
streamOfCharSequence.collect(Collectors.joining(delimiter))
而不是String.join(delimiter, Iterable<CharSequence>
。
您可以尝试类似
的内容String result = StreamSupport
.stream(Spliterators.spliteratorUnknownSize(iterator,
Spliterator.ORDERED), false)
.map(e -> e.stringFunction()).collect(Collectors.joining(", "));
答案 1 :(得分:4)
使用Guava,您应该能够做到这样的事情:
Iterator<Class1> iter = ...
String result = Joiner.on("//").join(Iterators.transform(iter, x -> x.stringFunction()));
答案 2 :(得分:1)
以下作品,但似乎有点笨重。
Iterator<Class1> iterator = ...;
Iterator<CharSequence> funcIterator =
StreamSupport.stream(
Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
.map(x -> (CharSequence)x.stringFunction())
.iterator();
String result = String.join("//", () -> funcIterator);
创建Iterator<String>
并不起作用,因为join
没有
接受;因此,有必要将类型声明为
Iterator<CharSequence>
,并将String
投射到。{
lambda中的CharSequence
。语法() -> idIterator
适用于
创建一个Iterable
,其迭代器是给定的迭代器。
有更简单的方法吗?