1、实体类(Student)
@Data
public class Student {
private String id;
private String name;
private String subject;
private double score;
}
2、获取集合中所有的name(map的使用)
public List<String> getName(List<Student> students){
List<String> names = students.stream().map(Student::getName).collect(Collectors.toList());
return names;
}
3、对所有学生按照学科进行分组(groupingBy的使用)
public Map<String,List<Student>> studentGroup(List<Student> students){
Map<String,List<Student>> subjectMap = students.stream().collect(Collectors.groupingBy(Student::getSubject));
return subjectMap;
}
4、按照条件对集合进行过滤(filter的使用)
// 过滤掉分数低于60分的学生
students.removeIf(stu -> stu.getScore() < 60);
List<Student> filters = students.stream().filter(stu -> stu.getScore() >= 60).collect(Collectors.toList());
注:上面2中方式效果一样
5、lambda表达式作为入参
比如要对10个学生的分数求和
private double scoreTotal(List<Student> students, ToDoubleFunction<? super Student> mapper) {
return result.stream().mapToDouble(mapper).sum();
}
public double stuScore(){
List<Student> students = sutdentServiceImpl.getAllStus();
double stuScore = scoreTotal(students,Student::getScore);
return stuScore;
}
6、removeIf结合lambda的使用
List<Student> students = sutdentServiceImpl.getAllStus();
// 过滤小于等于18岁的学生
students.removeIf(stu->stu.age<=18);
7、将map转成string
我们平常会有这样的需求,后端在请求第三方接口,如果链接后面跟参数,需要在链接后面拼接参数,但我们的参数一般放在map里面,下面就是用lambda表达式操作map转String
Map<String,Integer> map = new HashMap<>();
map.put("aa",11);
map.put("aa1",11);
map.put("aa2",11);
map.put("aa3",11);
map.put("aa4",11);
map.put("bb",11);
map.put("bb1",11);
map.put("bb3",11);
String collect = map.entrySet().stream()
.filter(entry -> entry.getKey().contains("aa"))
.map(entry -> entry.getKey() + "=" + entry.getValue()).collect(Collectors.joining("&"));
输出结果
aa=11&aa1=11&aa3=11&aa2=11&aa4=11
上面的代码,总共分为3步
①对map通过key值进行过滤:entry.getKey().contains("aa")
②拼接单个键值对:entry.getKey() + "=" + entry.getValue()
③键值对之间插入&:Collectors.joining("&")
8.1、实体类属性组合成map
Map<String, String> fieldMap = stuList.stream()
.collect(Collectors.toMap(Stu::getId, Stu::getName));
8.2 实体类属性&对象组成map
LogEntity log = new LogEntity();
log.setId("1");
log.setIp("baidu.com");
LogEntity log1 = new LogEntity();
log1.setId("2");
log1.setIp("merit.com");
List<LogEntity> list = Lists.newArrayList();
list.add(log);
list.add(log1);
Map<String, LogEntity> logMap = list.stream().collect(Collectors.toMap(LogEntity::getId, LogEntity::getLogEntity));
- 注:上面需要在实体类中创建一个类方法
public static LogEntity getLogEntity(LogEntity logEntity) {
return logEntity;
}
9.1、对象列表,通过某一指定元素特定顺序进行排序
List<String> idList = Arrays.asList(ids.split(","));
List<StuInfo> stus = stuDao.findAllById();
stus.sort(Comparator.comparingInt(o->idList.indexOf(o.getId()));
9.2、基本数据类型列表,数据排序
List<Integer> sorts = Lists.newArrayList();
sorts.sort((a1,a2)->a2-a1);
10、指定属性进行去重
tempManagers = tempManagers.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TaskTempEntity::getTempId))), ArrayList::new));
11、List<String>转List<Long>
List<String> idList = Arrays.asList(ids.split(","));
List<Long> longList = idList.stream().map(Long::parseLong).collect(Collectors.toList());