【问题标题】:Reject values while using Maps.uniqueIndex with Guava在使用 Maps.uniqueIndex 和 Guava 时拒绝值
【发布时间】:2012-07-26 08:38:18
【问题描述】:

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

【问题讨论】:

    标签: java functional-programming guava


    【解决方案1】:

    Guava 贡献者在这里。

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

    【讨论】:

    • yeeees 我知道,但我喜欢番石榴 :)
    • 我很高兴你这样做了——我在一个多月后开始全职从事 Guava 工作——但 Guava 并不能真正将 Java 变成一种函数式编程是理智的语言一般情况下的方法。
    • 这就是我学习 Scala 的原因。痛苦是匿名内部类的冗长,但是一旦创建了类就可以了。检查我的代码pastebin.com/KNe5LxAP 最后,Scala 提供了类似 Option getOrElse 的东西。 Guava 中的 Either 怎么样?
    • 正如对here 的简要讨论,在纯Java 中使用Either 做一些有用的事情真的没有任何不错的方法。
    • 仅供参考,在链接代码的第 46 和 65 行,您无需检查 Multimap.get 返回的列表是否为空——因为 Multimap.get 从不返回空。我仍然不确定您为什么要使用 Optional 来代替空列表,但是嗯。
    【解决方案2】:

    我想补充一点,如果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 lambda 会更加简洁。

    【讨论】:

    • 是的,实际上我想知道的是我是否可以在不创建谓词的情况下做到这一点。最后这就是我所做的
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 2020-11-14
    • 2019-12-11
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2013-01-07
    相关资源
    最近更新 更多