过滤可选字符串列表
filter a list of optional strings
给定一个方法,例如
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
}
有没有办法过滤掉所有少于5个字符的字符串?
一种方法是解包 Optional
,过滤掉短词,然后将结果包装在新的 Optional
:
中
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
if (maybeWords.isPresent()) {
List<String> words = maybeWords.get();
List<String> longWords = words.stream()
.filter(word -> word.length() >= 5)
.collect(Collectors.toList());
return Optional.of(longWords);
}
return maybeWords;
}
肯定有比这更简单的解决方案吗?
您可以使用 Optional#ifPresent
and Collection#removeIf
.
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
maybeWords.ifPresent(list -> list.removeIf(str -> str.length() < 5));
return maybeWords;
}
Optional
provides methods, such as Optional#map
,允许您修改其值(如果该值存在)。你可以在你的情况下使用它:
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
return maybeWords.map(list ->
list.stream().filter(s -> s.length() >= 5).collect(Collectors.toList()));
}
使用map
:
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
return maybeWords.map(x -> x.stream().filter(y -> y.length() >= 5)
.collect(Collectors.toList()));
}
但是,您应该注意 Optional
是为方法返回类型设计的,而不是为参数设计的。我只接受 List<String>
,因为 List<String>
已经可以为 null。并“正常”检查空值。有关详细信息,请参阅 。
给定一个方法,例如
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
}
有没有办法过滤掉所有少于5个字符的字符串?
一种方法是解包 Optional
,过滤掉短词,然后将结果包装在新的 Optional
:
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
if (maybeWords.isPresent()) {
List<String> words = maybeWords.get();
List<String> longWords = words.stream()
.filter(word -> word.length() >= 5)
.collect(Collectors.toList());
return Optional.of(longWords);
}
return maybeWords;
}
肯定有比这更简单的解决方案吗?
您可以使用 Optional#ifPresent
and Collection#removeIf
.
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
maybeWords.ifPresent(list -> list.removeIf(str -> str.length() < 5));
return maybeWords;
}
Optional
provides methods, such as Optional#map
,允许您修改其值(如果该值存在)。你可以在你的情况下使用它:
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
return maybeWords.map(list ->
list.stream().filter(s -> s.length() >= 5).collect(Collectors.toList()));
}
使用map
:
public Optional<List<String>> removeShortWords(Optional<List<String>> maybeWords) {
return maybeWords.map(x -> x.stream().filter(y -> y.length() >= 5)
.collect(Collectors.toList()));
}
但是,您应该注意 Optional
是为方法返回类型设计的,而不是为参数设计的。我只接受 List<String>
,因为 List<String>
已经可以为 null。并“正常”检查空值。有关详细信息,请参阅