我有一个流,只有在谓词匹配时才想应用方法。
E.g。我想处理一个流并用默认值替换所有null
s。实现这一目标的最佳方法是什么?
答案 0 :(得分:2)
您应该只使用地图值
data.stream()
.map(v -> v == null ? defaultValue : v)
... // do whatever you need to do with it.
修改强>
如果您需要做很多事情,可以创建一个函数来为您完成。
public class DefaultValue<T> extends Function<T, T> P{
private final T t;
public DefaultValue(T t){
this.t. = t;
}
public T apply(T t) {
return t == null ? this.t : t;
}
}
data.stream()
.map(new DefaultValue(someValue));
// Do what you need to do
答案 1 :(得分:2)
如果您希望保留不与过滤器匹配的项目的原始值,请使用带有三元逻辑的map
:
以下是一个例子:
Stream<String> stream = Arrays.stream(
new String[]{"quick", null, "brown", "fox", null, "jumps"}
);
List<String> res = stream
.map(s -> s != null ? s : "<EMPTY>")
.collect(Collectors.toList());
for (String s : res) {
System.out.println(s);
}
过滤逻辑嵌入在map
:
s -> s != null ? s : "<EMPTY>" // Using default values for null strings