3

我想知道当我们使用 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”映射键,或者我是否总是需要在使用谓词之前/之后进行一些过滤?

4

2 回答 2

8

番石榴贡献者在这里。

没有。做一个过滤器......或者可能更有效,只需自己构建地图,不要Maps.uniqueIndex完全使用。无论如何,它可能更简单,更短。

于 2012-07-26T09:21:13.250 回答
4

我想补充一点,如果这个问题得到解决,您将能够:

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 lambda 时,它会更加简洁。

于 2012-07-26T10:18:47.873 回答