1.获取对象集合中的单个属性
List<Integer> contactIdList = userContact.stream().map(ContactModel::getContactId).collect(Collectors.toList());
2.获取list和、平均值等计算:
求和:lists.stream().mapToInt(SlDailySceneAnalysisModel::getNewUsers).reduce(0, Integer::sum);
其他计算:参见本文件夹笔记《list求和、平均值等》
3.list进行属性匹配,适用于两个对象list存在字段关联(如外键)的情况。
//两个list中,外键id关联,相关联的数据组成一个新的集合:如班级表个学生表
foreach(Member member:memberList){
Optional<User> optional =
userList== null ? null : userList.stream().filter(obj -> obj.getId().equals(member.excuId)).findFirst();
int memberAge =
optional.isPresent() && optional.get().getAge() != null ? optional.get().getAge() : 0;
}
注释:对原list的值,也可以optional 直接修改
4. 遍历删除list中元素,采用迭代器的方式,不会报错
Iterator<DwContactUserDTO> iterator = userSexStatistics.iterator();
while(iterator.hasNext()){
DwContactUserDTO next = iterator.next();
if (next.getGender() != 1 && next.getGender() != 2) {
num0= num0+next.getGenderCount();
iterator.remove();
}
}
5.集合重新排序,根据某个值
重新排序:默认正序,到序加:.reversed()
6.list截取(这里拿分页举例)
List<User> models = lstMiniBehavior.subList(page.getPageNo() * page.getPageSize(), page.getPageNo());
7.字符串处理
string与list互换(逗号隔开)
// 默认 List<String> unionIds = xxxxx
String unionIdStr = String.join(",", unionIds);//list转str
List<String> mpmUnionId = Arrays.asList(mpmUnionIds.split(","));//str转list
8.map 手动排序(与5不同的是,map根据value的值进行排序,先转list,再排序,方法有所不同)
//注意 ArrayList<>() 括号里要传入map.entrySet()
//map转list,再排序
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>(){
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2){
//按照value值,重小到大排序
// return o1.getValue() - o2.getValue();
//按照value值,从大到小排序
//return o2.getValue() - o1.getValue();
//按照value值,用compareTo()方法默认是从小到大排序
return o1.getValue().compareTo(o2.getValue());
}
});
//检查
for (Map.Entry s : list){
System.out.println(s.getKey()+"--"+s.getValue());
}
9.map<Integer,Integer> 表达式排序,并且截取
//排序,倒叙10,9,8.。。
//tempMap<Integer, Integer> Value排序并且截取,成一个新map
final Map<Integer, Integer> sortedByCounts =
tempMap.entrySet().stream().sorted(
(e1, e2) -> e2.getValue().compareTo(e1.getValue())
).limit(10).collect(
Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new)
);
10.map<String, Integer> 根据value排序
Map<String, Integer> map = new Map();
map .put("广东",111);
map .put("湖南",33);
map .put("北京",213);
//省份排序
final Map<String, Integer> provinceMapTop = provinceMap.entrySet()
.stream()
.sorted((e1, e2) -> e2.getValue().compareTo(e1.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
-->{北京=213,广东=111,湖南=33}
11.list根据属性分组,遍历(groupingBy)
//list根据name分组,成map
Map<String,List<User>> stringListMap = list.stream().collect(Collectors.groupingBy(User::getName));
Iterator<Map.Entry<String, List<User>>> entries = map.entrySet().iterator();
//检查
while (entries.hasNext()) {
Map.Entry<Integer, Integer> entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}