1. 编写目的
总结一下这么长时间使用 java 的 lambda 表达式的方法,也方便以后使用。
2. map 操作
map 应该理解为建立一个映射关系,将已有的数据映射到另外一种格式或者放入某个函数中得到新的数值。
2.1 map 基础操作(结合list)
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5, 42, 99, 323);
List<Double> result1 = numbers.stream().map(e -> Math.pow(e, 2)).collect(Collectors.toList());
result1.forEach(System.out::println);
List<Double> result2 = numbers.stream().map(e -> e * 1.0).collect(Collectors.toList());
result2.forEach(System.out::println);
List<Double> result3 = numbers.stream().map(Double::valueOf).collect(Collectors.toList());
result3.forEach(System.out::println);
List<String> result4 = numbers.stream().map(e -> e + "").collect(Collectors.toList());
result4.forEach(System.out::println);
int sum = numbers.stream().mapToInt(Integer::intValue).sum();
System.out.println(sum);
List<Integer> result5 = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
result5.forEach(System.out::println);
2.2 map 用于“解包”
比如说我们拿到一个 List<Pair<String, Double>> 类型的学生成绩类型的数据,需要从中提取出所有 Double 类型的数据,组成新的 List。
LinkedList<Pair<String, Double>> students = new LinkedList<>();
students.add(new Pair<>("xiaoming", 98.5));
students.add(new Pair<>("xiaofang", 98.8));
students.add(new Pair<>("xiaoli", 68.8));
students.add(new Pair<>("xiaogabg", 48.8));
students.add(new Pair<>("xiaohe", 73.4));
List<String> names = students.stream().map(e -> e.getKey()).collect(Collectors.toList());
names.forEach(System.out::println);
List<Double> scores = students.stream().map(Pair::getValue).collect(Collectors.toList());
scores.forEach(System.out::println);
这个例子比较简单,当遇到复杂的数据的时候可以多层 map,一层一层的解开。
3. filter 操作
过滤功能,需要注意的是 返回的是符合条件的 。
LinkedList<Pair<String, Double>> students = new LinkedList<>();
students.add(new Pair<>("xiaoming", 98.5));
students.add(new Pair<>("xiaofang", 98.8));
students.add(new Pair<>("xiaoli", 68.8));
students.add(new Pair<>("xiaogabg", 48.8));
students.add(new Pair<>("xiaohe", 73.4));
List<Pair<String, Double>> some = students.stream().filter(e -> e.getValue() > 90).collect(Collectors.toList());
some.forEach(System.out::println);
List<String> some2 = students.stream().filter(e -> e.getValue() > 90).map(e -> e.getKey()).collect(Collectors.toList());
some2.forEach(System.out::println);
4. Collectors 操作
前面一直在用 Collectors.toList 方法,还有其他用法主要如下。
4.1 toSet 去重
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5, 42, 99, 323);
Set<Integer> result1 = numbers.stream().collect(Collectors.toSet());
result1.forEach(System.out::println);
4.2 toList
前面的例子一直在用这个方法,这里不介绍了。
4.3 groupBy 分组操作
LinkedList<Pair<String, Double>> students = new LinkedList<>();
students.add(new Pair<>("xiaoming", 98.5));
students.add(new Pair<>("xiaoming", 98.5));
students.add(new Pair<>("xiaoming", 98.5));
students.add(new Pair<>("xiaofang", 98.8));
students.add(new Pair<>("xiaoli", 68.8));
students.add(new Pair<>("xiaogabg", 48.8));
students.add(new Pair<>("xiaohe", 73.4));
students.add(new Pair<>("xiaohe", 73.4));
students.add(new Pair<>("xiaohe", 73.4));
Map<String, List<Pair<String, Double>>> group = students.stream().collect(Collectors.groupingBy(Pair::getKey));
group.entrySet().forEach(e->{
System.out.print("分组:"+e.getKey()+":\t");
System.out.print(e.getValue()+"\n");
});
5. 总结
只是对以前的比较进行补充,希望可以帮助到需要的小伙伴。致谢~
Smileyan 2022.6.21 19:57
|