map 通过 key值排序 正序 从小到大 并将Value 添加到一个新的List
通过value值排序 须将
comparingByKey() 更改为 comparingByValue()
orederNap 表示 要处理的Map
List<Object> alist = new LinkedList<>();
orderMap.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEachOrdered(e->alist.add(e.getValue()));
倒序 从大到小 reversed()
通过value值排序 须将
comparingByKey() 更改为 comparingByValue()
orderMap.entrySet().stream().sorted((Comparator<? super Map.Entry<Integer, Object>>) Map.Entry.comparingByKey().reversed()).forEachOrdered(e->alist.add(e.getValue()));
stream流 一对多时 将某个字段 根据某个字段进行合并
如:一个List中 有
[TeacherRole(id=null, examId=1, teacherId=1, roleId=2, subjectId=0), TeacherRole(id=null, examId=1, teacherId=1, roleId=3, subjectId=0)]
但是 我们需要 让相同的teacherId 拥有一个完整的roleId 如 roleId=2,3
Collectors.toMap() 三个重载方法
keyMapper:Key 的映射函数 valueMapper:Value 的映射函数 mergeFunction:当 Key 冲突时,调用的合并方法 mapSupplier:Map 构造器,在需要返回特定的 Map 时使用
toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper);
toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction);
toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier);
具体实现
List<TeacherRole> collect = teacherRoles.stream()
// 表示id为key, 接着如果有重复的,那么从 实体对象o1与o2中筛选出一个,这里选择o1,
// 并把id重复,需要将nums和sums与o1进行合并的o2, 赋值给o1,最后返回o1
.collect(Collectors.toMap(TeacherRole::getTeacherId, a -> a, (o1, o2) -> {
o1.setRoleId(o1.getRoleId() + o2.getRoleId());
return o1;
})).values().stream().collect(Collectors.toList());
//未完 待续