【问题标题】:How to reduce list to map with Java functional API如何使用 Java 功能 API 减少列表以映射
【发布时间】:2017-09-07 22:00:03
【问题描述】:

我想将一串文本转换为字典,其中包含所有唯一个单词作为键,翻译作为值。

我知道如何将字符串转换为包含唯一单词(Split -> List -> stream() -> distinct()),并且我有翻译服务可用,但是将流减少为Map 的最方便的方法是原始元素和它的一般翻译?

【问题讨论】:

标签: java functional-programming java-8 java-stream


【解决方案1】:

假设您有一个字符串列表 "word1", "word2", "wordN" 没有重复:

这应该可以解决问题

List<String> list = Arrays.asList("word1", "word2", "workdN");
    
Map<String, String> collect = list.stream()
   .collect(Collectors.toMap(s -> s, s -> translationService(s)));

这会返回,不维护插入顺序。

{wordN=translationN, word2=translation2, word1=translation1}

【讨论】:

    【解决方案2】:

    试试下面的代码:

    public static void main(String[] args) {
        String text = "hello world java stream stream";
    
        Map<String, String> result = new HashSet<String>(Arrays.asList(text.split(" "))).stream().collect(Collectors.toMap(word -> word, word -> translate(word)));
    
        System.out.println(result);
    }
    
    private static String translate(String word) {
        return "T-" + word;
    }
    

    会给你输出:

    {java=T-java, world=T-world, stream=T-stream, hello=T-hello}

    【讨论】:

      【解决方案3】:

      您可以通过 collect 直接执行此操作:

      yourDistinctStringStream
      .collect(Collectors.toMap(
          Function.identity(), yourTranslatorService::translate
      );
      

      这将返回一个Map&lt;String, String&gt;,其中映射键是原始字符串,映射值是翻译。

      【讨论】:

        猜你喜欢
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 2016-01-22
        • 1970-01-01
        • 2016-04-08
        相关资源
        最近更新 更多