为了账号安全,请及时绑定邮箱和手机立即绑定

如何从数组的所有元素中减去一个常量值?

如何从数组的所有元素中减去一个常量值?

HUH函数 2021-06-25 18:57:52
我有一个数组,例如我想从数组的所有元素中减去 7。除了下面的逻辑,我怎么能做到这一点。for (int i = 0; i < array.length; i++){    array[i]-=7;}任何相关的流都会有所帮助。编辑 - 它不应该是一个数组。它也可以是一个 ArrayList。
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

对于流,您可以map像这样使用:


int[] array = {-1, 8, 9};

array = Arrays.stream(array)

        .map(i -> i - 7)

        .toArray();

或者,如果您使用的是 List,则可以使用:


List<Integer> array = new ArrayList<>(Arrays.asList(-1, 8, 9));

array = array.stream()

        .map(i -> i - 7)

        .collect(Collectors.toList());


查看完整回答
反对 回复 2021-06-30
?
jeck猫

TA贡献1909条经验 获得超7个赞

虽然流可能看起来“新而酷”,但您应该记住实际发生的事情。


编码:


array = Arrays.stream(array)

             .map(i -> i - 7)

             .toArray();

实际上运行这样的东西(但更糟......):


int[] newArray = new int[array.length];

for (int i = 0; i < array.length; i++) {

     newArray[i] = array[i]-7;

}

array = newArray;

所以你可以很容易地看到它与你自己的代码相比效率有多低。


并不是说它不起作用,但请记住。


如果它是一个数组列表,你可以使用 lst.set(i, lst.get(i) - 7),顺便说一句......


查看完整回答
反对 回复 2021-06-30
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

流应该是无副作用的,因此流不是修改数组或列表内容的好选择。不过,类似的事情是可能的。


第ArrayList一个。我认为这是一个很好的方式(然后for循环也很好):


    List<Integer> list = new ArrayList<>(List.of(11,  14, 9, 13));

    list.replaceAll(e -> e - 7);

    System.out.println(list);

[4, 7, 2, 6]


该replaceAll方法是在 Java 8 中引入的。


我不认为存在一个很好的int数组解决方案。你可能会这样做:


    int[] array = { 11,  14, 9, 13 };

    Arrays.setAll(array, ix -> array[ix] - 7);

    System.out.println(Arrays.toString(array));

[4, 7, 2, 6]


我觉得阅读起来既不自然也不容易,我更喜欢for循环。


如果您碰巧有一个非 null 数组Integer,则可以通过Arrays.asList以下方式使用上述第一种方法:


    Integer[] array = { 11,  14, 9, 13 };

    Arrays.asList(array).replaceAll(e -> e - 7);

    System.out.println(Arrays.toString(array));

[4, 7, 2, 6]


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 723 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信