【问题标题】:How to multiply array elements by condition如何将数组元素乘以条件
【发布时间】:2020-02-19 08:56:56
【问题描述】:

我有一个数组,想要将大于 9 的元素乘以 2 且小于或等于 9 的元素乘以 3。

  List<Integer> list = Arrays.asList(3, 6, 9, 12, 15);
  list.stream().map(number -> number * 3).forEach(System.out::println); 

这个乘以 3 ,其中

list.stream().filter(number -> number>3).map(number -> number * 3).forEach(System.out::println);

这个可以乘,也可以过滤。

我想要 3 ,6 ,9 乘以 3 和 12, 15 乘以 2。

感谢任何帮助。

【问题讨论】:

  • 为什么9要乘以3? “小于 9 x 3”不包括 9

标签: java arrays java-stream


【解决方案1】:

您可以组合filtermap 步骤:

list.stream()
    .map(n -> n > 9 ? n * 2 : n * 3)
    .forEach(System.out::println);

【讨论】:

  • @user85421 I want 3 ,6 ,9 multiplied by 3 and 12, 15 multiplied by 2
【解决方案2】:

你可以这样做。 您不需要过滤器,您正在使用条件进行映射。

list.stream()
    .map(number -> number > 9 ? number * 2 : number * 3)
    .forEach(System.out::println);

【讨论】:

    【解决方案3】:

    如果有人不喜欢 Eran 答案中的三元运算符,您可以使用块代替,如下所示:

    list.stream()
      .map(n -> {
         if (n > 9){ 
            return n * 2; 
          }
          else { 
            return n * 3; 
          }
        })
      .forEach(System.out::println);
    

    我认为在这种特定情况下使用三元运算符的解决方案更简洁,但这也是一种选择。如果有更多的条件,它可能会很有用。

    【讨论】:

    • 如果有更多的条件,这将很有用
    • 如果使用这个,普通循环不是更合适吗?
    • @user85421 我相信这个问题的想法是为此使用流,也许是出于学习目的。或者它可能只是 SO 和 OP 之后想要在流上执行更多操作的简化案例。
    • @KarthikeyanVaithilingam 加上这是显示 OP 迄今为止可能遗漏的内容:lambdas 是带有主体的实际函数。
    猜你喜欢
    • 2021-08-31
    • 2017-03-11
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多