我想知道在使用Guava方法时是否可以丢弃某些值。
public static Function<Locale, String> GET_LANGUAGE = new Function<Locale, String>() {
@Override
public String apply(Locale input) {
return StringUtils.isBlank(input.getLanguage()) ? "NO_LANGUAGE" : input.getLanguage();
}
};
Maps.uniqueIndex(availableLocales, GET_LANGUAGE);
我知道我可以使用多图,因为许多区域设置可以使用相同的语言,但它实际上符合我的需要。
例如,我希望没有任何语言的语言环境不在输出映射中。因为我不能返回null或类似的东西,我将使用不相关语言的语言环境重定向到键“NO_LANGUAGE”。问题是仍然可以检索该值。
是否存在某种“/ dev / null”映射键,或者在使用谓词之前/之后是否总是需要进行一些过滤?
答案 0 :(得分:7)
番石榴贡献者。
不。做一个过滤器......或者可能更有效,只需自己构建地图,不要完全使用Maps.uniqueIndex
。无论如何,它可能更简单,更短。
答案 1 :(得分:3)
我想补充一点,如果this issue已解决,您将可以执行以下操作:
ImmutableMap<String, Locale> index = FluentIterable.from(availableLocales)
.filter(NOT_BLANK_LANGUAGE)
.uniqueIndex(GET_LANGUAGE);
public static Predicate<Locale> NOT_BLANK_LANGUAGE = new Predicate<Locale>() {
@Override
public boolean apply(Locale input) {
return !StringUtils.isBlank(input.getLanguage());
}
};
public static Function<Locale, String> GET_LANGUAGE = new Function<Locale, String>() {
@Override
public String apply(Locale input) {
return input.getLanguage();
}
};
,使用Java 8 lambdas,将更加简洁。