JavaScript有 Array.join()
js>["Bill","Bob","Steve"].join(" and ")
Bill and Bob and Steve
Run Code Online (Sandbox Code Playgroud)
Java有这样的东西吗?我知道我可以用StringBuilder自己解决一些问题:
static public String join(List<String> list, String conjunction)
{
StringBuilder sb = new StringBuilder();
boolean first = true;
for (String item : list)
{
if (first)
first = false;
else
sb.append(conjunction);
sb.append(item);
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
...但是,如果像这样的东西已经是JDK的一部分,那就没有意义了.
示例程序:
public final class CollectorTest
{
private CollectorTest()
{
}
private static <T> BinaryOperator<T> nope()
{
return (t, u) -> { throw new UnsupportedOperationException("nope"); };
}
public static void main(final String... args)
{
final Collector<Integer, ?, List<Integer>> c
= Collector.of(ArrayList::new, List::add, nope());
IntStream.range(0, 10_000_000).boxed().collect(c);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,为了简化这里的问题,没有最终的转换,因此生成的代码非常简单.
现在,IntStream.range()生成一个顺序流.我只是将结果打成Integers然后我的设计Collector将它们收集到一个List<Integer>.很简单.
无论我运行多少次这个示例程序,UnsupportedOperationException从不命中,这意味着我的虚拟组合器永远不会被调用.
我有点期待这个,但后来我已经误解了流,我不得不问这个问题......
可以在Collector当流的组合曾经被称为保证是连续的?