【问题标题】:Map Collections in JavaJava 中的地图集合
【发布时间】:2016-06-13 07:44:04
【问题描述】:

我来自 JavaScript 背景,在 JS 中我们可以轻松地映射/更改数组。

var arr = [1,2,3,4];
var doubled = arr.map(function(c) { 
    return c * 2;
});

console.log(doubled); //[2,4,6,8]

在 Java 中有类似的东西吗?

【问题讨论】:

标签: javascript java arrays collections


【解决方案1】:

肯定的:

Integer arr[] = { 1, 2, 3, 4 };
Arrays.stream(arr).map(i -> i * 2).forEach(System.out::println);

请注意,这不会更改原始数组。它从源数组创建一个流,通过应用 map 函数创建另一个流,并为流的每个元素执行 System.outprintln

使用

Integer newArr[] = Arrays.stream(arr)
        .map(i -> i * 2)
        .collect(Collectors.toList())
        .toArray(new Integer[arr.length]);

将结果流的元素收集到Integers 的数组中。

编辑:如果您使用原始类型,则有一种更有效的方法:

int[] intArr = { 1, 2, 3, 4};
int[] newIntArr = Arrays.stream(intArr).map(i -> i * 2).toArray();

【讨论】:

    【解决方案2】:

    您可以通过流来做到这一点。

    Integer[] array = {1, 2, 3, 4};
    Integer[] doubled = (Integer[]) Arrays.stream(array).map(i -> i * 2).toArray();
    

    上面的代码会将原始数组映射到一个新数组,其中每个值都加倍。

    【讨论】:

      【解决方案3】:
      List<Integer> arr = Arrays.asList(1,2,3,4);
      List<Integer> dbl = arr
              .stream()
              .map(a -> a * 2)
              .collect(Collectors.toList());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-16
        • 2016-11-02
        • 2012-10-20
        • 1970-01-01
        • 2016-08-13
        • 2013-09-05
        相关资源
        最近更新 更多