【问题标题】:Validate and Change value from list of object using Lambda java 8使用 Lambda java 8 验证和更改对象列表中的值
【发布时间】:2020-06-24 06:49:21
【问题描述】:
Mood Pojo (nameOfMood, Score, Category)
Mood happyMood = new Mood("Happy", 10, POSITIVE);
Mood sadMood = new Mood("Sad", 1, NEGATIVE);
Mood confusedMood = new Mood("Confused", 6, NEGATIVE);
Mood irritatedMood = new Mood("Irritated", 5, NEGATIVE);
Mood blessedMood = new Mood("Blessed", 10, POSITIVE);

检查分数是否大于 5,将类别值更新为正面,并使用单行 lambda 或流函数将所有正面类别情绪获取到 Map<String(nameOfMood), Mood>

【问题讨论】:

    标签: java collections java-8 java-stream


    【解决方案1】:

    如果您知道分数

    List<Mood> mood = Arrays.asList(happyMood, sadMood, ...);
    Map<String(nameOfMood), Mood> result =  mood.stream()
                  .filter(e-> e.getScore() > 5)
                  .peek(e-> e.setCategory("Positive"))
                  .map(Collectors.toMap(e->e.nameOfMood(), e));
    
    

    【讨论】:

      【解决方案2】:

      假设 Mood 具有全参数构造函数并且 Category 是一个枚举,这就是您要查找的内容:

      Map<String, Mood> map = Stream.of(happyMood, sadMood, confusedMood, irritatedMood, blessedMood)
          .filter(mood -> mood.getScore() > 5 || POSITIVE == mood.getCategory())
          .map(mood -> new Mood(mood.getNameOfMood(), mood.getScore(), POSITIVE))
          .collect(Collectors.toMap(Mood::getNameOfMood, Function.identity()));
      

      有4个简单的步骤:

      1. 利用Stream::of 的优势对n 个相同类型的输入进行流式传输。
      2. 使用Stream::filter 保留POSITIVEscore &gt; 5(因为这些将在下一步中变为POSITIVE
      3. 使用Stream::map 将每一个reaming 情绪转变为POSITIVE
      4. 使用Stream::collect 将流打包到由收集器Collectors.toMap(Mood::getNameOfMood, Function.identity()) 定义的所需输出中,这将创建一个键为nameOfMood 的映射并为对象Mood 本身赋值。

      请注意,此解决方案不适用于具有重复的 nameOfMood 的对象,因为 Map 不能包含重复的键。如果您希望保留所有值,则必须使用导致 Map&lt;String, List&lt;Mood&gt;&gt; 的分组或执行进一步缩减以达到原始所需的结果 Map&lt;String, Mood&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-24
        • 1970-01-01
        • 1970-01-01
        • 2018-01-11
        • 2021-01-07
        • 2017-07-30
        • 2017-09-25
        相关资源
        最近更新 更多