List常用方法
排序
//正序
dayZAmplitudeVos.sort(Comparator.comparing(DayAmplitudeVo::getTm));
//倒叙
dayZAmplitudeVos.sort(Comparator.comparing(DayAmplitudeVo::getTm).reversed());
//倒排
Collections.reverse(echartList);
//先顺序 再顺序
aList.sort(Comparator.comparing(a::getNum).thenComparing(a::getTm));
//先倒序 再顺序
aList.sort(Comparator.comparing(a::getNum).reversed().thenComparing(a::getTm));
//先倒叙 再倒序
aList.sort(Comparator.comparing(a::getNum).thenComparing(a::getTm).reversed());
//先顺序 再倒序
aList.sort(Comparator.comparing(a::getNum).reversed().thenComparing(a::getTm).reversed());
//空大于非空
riverVoQSortList.sort(Comparator.comparing(RiverVo::getQ, Comparator.nullsLast(Double::compareTo)));
//空小于非空
riverVoQSortList.sort(Comparator.comparing(RiverVo::getQ, Comparator.nullsFirst(Double::compareTo)));
分组
//跟据某个属性分组
Map<String, List<PersonData>> collect = list.stream().collect(Collectors.groupingBy(PersonData::getType));
System.out.println(collect);
//每位作者著作中定价最高的那本书
Map<String, Double> collect = list.stream().collect(Collectors.toMap(Book::getAuthor, Book::getPrice, BinaryOperator.maxBy(Comparator.comparingDouble(p -> (p)))));
//根据某个属性分组,汇总某个属性
Map<String, Integer> collect2 = list.stream().collect(Collectors.groupingBy(PersonData::getType,Collectors.summingInt(PersonData::getAge)));
System.out.println(collect2);
//根据某个属性添加条件过滤数据,
list = list.stream().filter(u -> !u.getType().equals("访客")).collect(Collectors.toList());
System.out.println(list);
//判断一组对象里面有没有属性值是某个值
boolean add = list.stream().anyMatch(m -> "王五".equals(m.getName()));
System.out.println(add);
//取出一组对象的某个属性组成一个新集合
List<String> names=list.stream().map(PersonData::getName).collect(Collectors.toList());
System.out.println(names);
//按name分组取按创建时间取最后一条数据,输出list
List<Item> lastItemsPerGroup = items.stream()
.collect(Collectors.groupingBy(Item::getName)) // 按name分组
.values().stream() // 获取分组的值
.map(group -> Collections.max(group, Comparator.comparing(Item::getCreateTime))) // 在每个组内取最后一条数据
.collect(Collectors.toList()); // 转换为List
深复制
List<ExtremumYearEchartsVo> htzList=new ArrayList<>(list);
排序
1.对象顺序
htzList.sort(Comparator.comparingInt(ExtremumYearEchartsVo::getHtzranking));
移动
//替换位置
Collections.swap(list,a,b);
list是你需要换位置的List。
a是你当前需要换位置的元素的索引。
b是你需要将这个元素换到哪个位置的索引。
//替换位置
List.add(a,List.remove(b));
list是你需要换位置的List。
a是你当前需要换位置的元素的索引。
b是你需要将这个元素换到哪个位置的索引。
//移动到指定位置 后面的对象后移
test.add(0,"test0");
需要调用add插入你需要的位置,后面的自动就会像后移动
判断空
CollectionUtils.isEmpty()
例1: 判断集合是否为空:
CollectionUtils.isEmpty(null): true
CollectionUtils.isEmpty(new ArrayList()): true
CollectionUtils.isEmpty({a,b}): false
例2: 判断集合是否不为空:
CollectionUtils.isNotEmpty(null): false
CollectionUtils.isNotEmpty(new ArrayList()): false
CollectionUtils.isNotEmpty({a,b}): true
list 转 map
Map<String,RRMeanValueVo> rrMeanValueVoMap=rrMeanValueVos.stream().collect(
Collectors.toMap(RRMeanValueVo::getIdtmStr, o->o));
Map<String,RRMeanValueVo> rrMeanValueVoMap=rrMeanValueVos.stream().collect(
Collectors.toMap(RRMeanValueVo::getIdtmStr,RMeanValueVo::getTm));
去重
//根据id字段去重
List<DataModel> dataList = datas.stream().map(DataModel::getId).distinct().collect(Collectors.toList());
//根据id和name字段去重
List<DataModel> dataList = datas.stream()
.map(t -> t.getId() + t.getName())
.distinct().collect(Collectors.toList());
//根据id字段去重
List<DataModel> dataList = datas.stream().filter(distinctByKey(DataModel::getId)).collect(Collectors.toList());
//根据id和name字段去重
List<DataModel> dataList = datas.stream().filter(distinctByKey(t -> t.getId() + t.getName())).collect(Collectors.toList());
//通过map的putIfAbsent方式去重
//putIfAbsent : 如果所指定的 key 已经在 HashMap 中存在,返回和这个 key 值对应的 value, 如果所指定的 key 不在 HashMap 中存在,则返回 null。
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> function) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(function.apply(t), Boolean.TRUE) == null;
}
//通过id字段去重,并且返回数据按照id的asicc码升序排列
private static List<DataModel> distinct(List<DataModel> orderList) {
Set<DataModel> set = new TreeSet<DataModel>(new Comparator<DataModel>() {
public int compare(DataModel a, DataModel b) {
return a.getId().compareTo(b.getId());
}
});
return null;
}
//将想要去重的字段作为key,对象作为Value,以此获得去重后的对象数据
Map<Integer, DataModel> entityMap= datas.stream().collect(Collectors.toMap(t -> t.getId() + t.getName(), Function.identity());
//加入(entity1,entity2) -> entity1) 该代码代表如果出现重复的key,则用最新的数据作为值
Map<Integer, DataModel> entityMap= datas.stream().collect(Collectors.toMap(t -> t.getId() + t.getName(), Function.identity(), (entity1,entity2) -> entity2));
//获取某个字段并去重
List<String> entitySet=list.stream().map(PersonInfo::getDepartment).collect(Collectors.toList()).stream().distinct().collect(Collectors.toList());
分组求总数
Map<String, Long>groupcounts =recordList.stream()
.collect(Collectors.groupingBy(o->(o.getIp()+"#"+o.getAgent()),Collectors.counting()));