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 ラムダを使用すると、さらに簡潔になります。

于 2012-07-26T10:18:47.873 に答える