【问题标题】: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.out 的 println。
使用
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());