gpt4 book ai didi

java - 如果 toList 返回空列表,则收集器返回 singletonList

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:56 25 4
gpt4 key购买 nike

我有一个相当大的流管道,因此想保持它的清洁。我有以下部分更大的管道

Integer defaultInt;
//...
Stream<Integer> ints;
ints.filter(/* predicate_goes_here */).collect(toSingletonIfEmptyCollector);

如果 toSingletonIfEmptyCollector 返回非空列表和 Collections.singletonList(defaultInt) 如果 Collectors.toList() 返回空。

有没有更短的方法来实现它(例如,通过组合 JDK 中提供的标准收集器)而不是从头开始实现所有 Collector 的方法?

最佳答案

您可以使用 collectingAndThen并在内置的 toList() 收集器上执行额外的完成操作,如果没有元素,它将返回一个单例列表。

static <T> Collector<T, ?, List<T>> toList(T defaultValue) {
return Collectors.collectingAndThen(
Collectors.toList(),
l -> l.isEmpty() ? Collections.singletonList(defaultValue) : l
);
}

它会像这样使用:

System.out.println(Stream.of(1, 2, 3).collect(toList(5))); // prints "[1, 2, 3]"
System.out.println(Stream.empty().collect(toList(5))); // prints "[5]"

关于java - 如果 toList 返回空列表,则收集器返回 singletonList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38434730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com