一、开发中经常需要数组和集合各种转换,结合Java8流式操作简单总结一下.
1、int[] 转 List<Integer>
转换样例如下:
int num[]={1,2,3,4,5,6,7,8,9,10};
转换方式如下:
List<Integer> list = Arrays.stream(num).boxed().collect(Collectors.toList());
输出如下:
附说明:
①:Arrays.stream(num) 可以替换成IntStream.of(num),使用IntStream中的boxed()装箱。
②:将IntStream转换成Stream<Integer>。
③:使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。
④:使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。
2、int[] 转 Integer[]
转换样例如下:
Integer[] integers=Arrays.stream(num).boxed().toArray(Integer[]::new);
3、List<Integer> 转 int[]
转换样例如下:
int[] arr=list.stream().mapToInt(Integer::intValue).toArray();
4、Integer[] 转 List<Integer>
转换样例如下:
List<Integer> list=new ArrayList<>(Arrays.asList(num));
5、List整型数据累加求和
转换样例如下:
list.stream().reduce(Integer::sum).orElse(0);
附: Stream.reduce()合并流的元素并产生单个值。
①:Arrays.stream(numbers).reduce(0, (a, b) -> a + b);
②:Arrays.stream(numbers).reduce(0, Integer::sum); 求和
③:Arrays.stream(numbers).reduce(0, Integer::max); 求最大值
④:Arrays.stream(numbers).reduce(0, Integer::min); 求最小值
⑤:String join = String.join("|", strings);连接字符串
⑥:map(x -> x.getXX().multiply(x.getXX().reduce(BigDecimal.ZERO, BigDecimal::add); 分组求和。
⑦:List<Object>中某个字段求和:list.stream().mapToLong(Object::getXX).sum;
二、List集合的去重
1、使用LinkedHashSet删除arraylist中的重复数据.
List<Integer> numbersList = new ArrayList<>(Arrays.asList(8, 7, 2, 3, 3, 9, 4, 5, 6, 6, 2, 7, 8));
LinkedHashSet<Integer> hashSet=new LinkedHashSet<>(numbersList);
List<Integer> resultList=new ArrayList<>(hashSet);
System.out.println(resultList);
2、使用Java8的Stream流式方式.
List<Integer> collectList = numbersList.stream().distinct().collect(Collectors.toList());
System.out.println(collectList);
3、List集合的contain方法.
List<Integer> containList=new ArrayList<>(numbersList.size());
for(Integer integer:numbersList){
if(!containList.contains(integer)){
containList.add(integer);
}
}
numbersList.clear();
numbersList.addAll(containList);
System.out.println(numbersList);
还是HashSet的方式,和For的双层循环的方式,这里就不在介绍了.