java8 一些 list和map Lambda 表达式

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());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值