最近有人问我,你知道给lambda给复杂的map排序怎么优雅的写吗,然后我就不知道了,于是在网上找了一些相关资料,在这里记录一下,避免以后别人拿我当大佬,以为我博学多才,才高八斗,然后我一脸的囧境
简单的Map<Stirng String>这种网上找一下还是蛮多的,但是复杂类型的比较少
底下这个是给Map<String List> 排序
package com.example.demo.test;
import com.example.demo.model.TestModel;
import lombok.extern.log4j.Log4j2;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
/**
* @Author yangyanglittlefriend
* @Date 2022/7/6 11:29
* @Version 1.0
*/
@Log4j2
public class TestMapSorted {
public static void main(String[] args) {
TestModel testModel = new TestModel("a", 1);
TestModel testModel2 = new TestModel("b", 2);
TestModel testModel3 = new TestModel("c", 3);
TestModel testModel4 = new TestModel("d", 4);
TestModel testModel5 = new TestModel("a", 5);
List<TestModel> testModels = new ArrayList<>();
testModels.add(testModel);
testModels.add(testModel2);
testModels.add(testModel3);
testModels.add(testModel4);
testModels.add(testModel5);
Map<String, List<TestModel>> stringListMap = testModels.stream()
.collect(Collectors.groupingBy(TestModel::getName));
// 用sorted获取map中最大的那个value
List o = stringListMap.entrySet().stream()
.sorted((Map.Entry<String, List<TestModel>> o1, Map.Entry<String, List<TestModel>> o2) -> o2.getValue().size() - o1.getValue().size())
.map(Map.Entry::getKey).collect(toList());
List<TestModel> maxValue = stringListMap.get(o.get(0));
log.info("max maxValue size:{}", maxValue);
// 用sorted获取map中最大的那个value
Optional<List<TestModel>> testModelList = stringListMap.entrySet().stream()
.sorted((Map.Entry<String, List<TestModel>> o1, Map.Entry<String, List<TestModel>> o2)
-> o2.getValue().size() - o1.getValue().size())
.map(Map.Entry::getValue).findFirst();
log.info("max testModel size:{}", testModelList);
// 用max获取map中最大的那个value
Optional sort = stringListMap.entrySet().stream().max(Comparator.comparing(x->x.getValue()== null ? 0:x.getValue().size()));
log.info("max testModel size:{}", sort);
}
}
1、底下这个是网上找的,这个里面写了一些用法,但是少了对map的排序
https://blog.csdn.net/mayaohao/article/details/117566732
2、这个里面挺全的,写了好多示例
https://blog.csdn.net/alan_liuyue/article/details/110185139
3、这个里面的也可以去看看,写的也很全
https://blog.csdn.net/mingyuli/article/details/112910938