gpt4 book ai didi

java - Guava:将 List> 转换为 List 只保留当前值

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:58 24 4
gpt4 key购买 nike

是否有使用 Guava 将可选列表转换为现值列表的优雅方法?

例如,从

ImmutableList.of(
Optional.of("Tom"), Optional.<String>absent(), Optional.of("Dick"),
Optional.of("Harry"), Optional.<String>absent()
)

一个只包含

的列表
["Tom", "Dick", "Harry"]

一种方法是:

List<T> filterPresent(List<Optional<T>> inputs) {
return FluentIterable.from(inputs)
.filter(new Predicate<Optional<T>>() {
@Override
public boolean apply(Optional<T> optional) {
return optional.isPresent();
}
}).transform(new Function<Optional<T>, T>() {
@Override
public T apply(Optional<T> optional) {
return optional.get();
}
}).toList();
}

但这很冗长。

不幸的是,Java 8 不是一个选项。

最佳答案

Guava 中实际上有内置方法:presentInstances in Optional :

Returns the value of each present instance from the supplied optionals, in order, skipping over occurrences of absent(). Iterators are unmodifiable and are evaluated lazily.

例子:

List<Optional<String>> optionalNames = ImmutableList.of(
Optional.of("Tom"), Optional.<String>absent(), Optional.of("Dick"),
Optional.of("Harry"), Optional.<String>absent());

Iterable<String> presentNames = Optional.presentInstances(optionalNames); // lazy

// copy to List if needed
List<String> presentNamesList = ImmutableList.copyOf(presentNames);
System.out.println(presentNamesList); // ["Tom", "Dick", "Harry"]

关于java - Guava:将 List<Optional<T>> 转换为 List<T> 只保留当前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26378453/

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