gpt4 book ai didi

java - 如何有条件地替换 Collection 中的值,例如 replaceIf(Predicate)?

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

如果 List 或 Collection 中的值为 null,是否有任何简单的方法可以替换该值?

我们总能做到list.stream().filter(Objects::nonNull);并可能将 0 添加回列表。

但我正在寻找的是类似 list.replaceIf(Predicate<>) 的 API .

最佳答案

这只适用于 List,不适用于 Collection,因为后者没有替换或设置元素的概念。

但是给定一个 List,使用 List.replaceAll() 方法很容易做你想做的事情:

List<String> list = Arrays.asList("a", "b", null, "c", "d", null);
list.replaceAll(s -> s == null ? "x" : s);
System.out.println(list);

输出:

[a, b, x, c, d, x]

如果你想要一个带有谓词的变体,你可以写一个小的辅助函数来做到这一点:

static <T> void replaceIf(List<T> list, Predicate<? super T> pred, UnaryOperator<T> op) {
list.replaceAll(t -> pred.test(t) ? op.apply(t) : t);
}

这将按如下方式调用:

replaceIf(list, Objects::isNull, s -> "x");

给出相同的结果。

关于java - 如何有条件地替换 Collection 中的值,例如 replaceIf(Predicate<T>)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35807818/

24 4 0