Java Stream流使用技巧
2024-03-05 本文已影响0人
莫失莫忘X3
Stream流是Java8添加的以一种链式调用的方法处理数据,主要侧重于计算。具有以下相关特点
- 代码简洁
- 链式调用
常用技巧
1.将数组变为当作List操作
String[] strArr = {"1", "2", "3", "4"};
List<String> strList = Arrays.asList(strArr);
注意:使用这种方式创建的list并不能使用add方法添加元素。
2.遍历全部的List集合元素
List<String> list = new ArrayList<>();
list.add("苹果");
list.add("橘子");
list.add("香蕉");
list.add("李子");
list.forEach(System.out::println);
输出结果为:
苹果
橘子
香蕉
李子
3.根据条件过滤元素
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
// 过滤大于2的所有元素
List<Integer> collect = list.stream().filter(item -> item > 2).collect(Collectors.toList());
System.out.println(collect);
4.对集合元素进行相关操作
List<String> list = new ArrayList<>();
list.add("苹果");
list.add("橘子");
list.add("香蕉");
list.add("李子");
List<String> collect = list.stream().map(item -> "水果-"+item).collect(Collectors.toList());
System.out.println(collect);
输出结果:
[水果-苹果, 水果-橘子, 水果-香蕉, 水果-李子]
5.对集合中的元素去重
List<String> list = new ArrayList<>();
list.add("苹果");
list.add("橘子");
list.add("橘子");
list.add("香蕉");
list.add("李子");
List<String> collect = list.stream().distinct().collect(Collectors.toList());
System.out.println(collect);
输出结果:
[苹果, 橘子, 香蕉, 李子]
6.集合转Map
List<EquipDataDto> list = new ArrayList<>();
list.add(new EquipDataDto(1L, "34", "12"));
list.add(new EquipDataDto(2L, "56", "12"));
list.add(new EquipDataDto(3L, "78", "12"));
Map<Long, String> collect = list.stream().collect(Collectors.toMap(EquipDataDto::getId, EquipDataDto::getCode));
System.out.println(collect);
输出结果为:
{1=34, 2=56, 3=78}
7.按照集合中某个元素进行分组
List<EquipDataDto> list = new ArrayList<>();
list.add(new EquipDataDto(1L, "34", "12"));
list.add(new EquipDataDto(2L, "56", "12"));
list.add(new EquipDataDto(3L, "78", "12"));
Map<Long, List<EquipDataDto>> collect = list.stream().collect(Collectors.groupingBy(EquipDataDto::getId));
System.out.println(collect);
输出结果为:
{1=[EquipDataDto(id=1, code=34, path=12)], 2=[EquipDataDto(id=2, code=56, path=12)], 3=[EquipDataDto(id=3, code=78, path=12)]}
8.将集合对象中的某个字段使用符号连接
List<EquipDataDto> list = new ArrayList<>();
list.add(new EquipDataDto(1L, "34", "12"));
list.add(new EquipDataDto(2L, "56", "12"));
list.add(new EquipDataDto(3L, "78", "12"));
String collect = list.stream().map(EquipDataDto::getCode).collect(Collectors.joining(","));
System.out.println(collect);
输出结果为:
34,56,78