jdk1.8 下 list stream转数组 map 循环 过滤等操作的常见写法

       Jdk1.8中, 对于 list 有非常多的快捷操作方便我们处理数据,比如 list 转 map 对象操作, 在开发过程我们有时会在for循环过程中查询另一个表的数据,我们可以提前把数据查询出来,转换成map,使用过程中通过map获取数据,避免循环过程中多次查库操作,提升性能

list 转 map<String,对象> 操作如下

package com.example.demo.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author qiankun.hu
 * @version 1.0.0
 * @createTime 2021年06月30日 10:42:00
 * @Description jdk1.8 list 流操作
 */
public class ListJdk8Test {

    public static void main(String[] args) {

        List<UserDetailInfo> list = new ArrayList<>();
        UserDetailInfo info = null;
        for (int i = 1; i <= 9 ; i++) {
            info = new UserDetailInfo();
            info.setId(i);
            info.setName("张三");
            info.setAge("年龄:"+i);
            info.setPhone("1752131102"+i);
            list.add(info);
        }

        Map<Integer,UserDetailInfo> userDetailInfoMap = list.stream().collect(Collectors.toMap(UserDetailInfo::getId,(s ->s)));

        Set<Map.Entry<Integer, UserDetailInfo>> entrys = userDetailInfoMap.entrySet();
        for(Map.Entry<Integer, UserDetailInfo> entry:entrys){
            System.out.println("key值:"+entry.getKey()+" value值:"+entry.getValue());
        }

    }

    static class UserDetailInfo{

        private Integer id;
        private String name;
        private String age;
        private String phone;

        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getAge() {
            return age;
        }

        public void setAge(String age) {
            this.age = age;
        }

        public String getPhone() {
            return phone;
        }

        public void setPhone(String phone) {
            this.phone = phone;
        }

        @Override
        public String toString() {
            return "UserDetailInfo{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", age='" + age + '\'' +
                    ", phone='" + phone + '\'' +
                    '}';
        }
    }

}

输出结果

key值:1 value值:UserDetailInfo{id=1, name='张三', age='年龄:1', phone='17521311021'}
key值:2 value值:UserDetailInfo{id=2, name='张三', age='年龄:2', phone='17521311022'}
key值:3 value值:UserDetailInfo{id=3, name='张三', age='年龄:3', phone='17521311023'}
key值:4 value值:UserDetailInfo{id=4, name='张三', age='年龄:4', phone='17521311024'}
key值:5 value值:UserDetailInfo{id=5, name='张三', age='年龄:5', phone='17521311025'}
key值:6 value值:UserDetailInfo{id=6, name='张三', age='年龄:6', phone='17521311026'}
key值:7 value值:UserDetailInfo{id=7, name='张三', age='年龄:7', phone='17521311027'}
key值:8 value值:UserDetailInfo{id=8, name='张三', age='年龄:8', phone='17521311028'}
key值:9 value值:UserDetailInfo{id=9, name='张三', age='年龄:9', phone='17521311029'}

如果是转换成 Map<String,String> 只需更改后面的值既可,如图,这里是 ID 对应 name

Map<Integer,String> userDetailInfoMap = list.stream().collect(Collectors.toMap(UserDetailInfo::getId,(s ->s.getName())));

list<对象>,转换成 list<String> 

List<String> StrList = list.stream().map(UserDetailInfo::getPhone).collect(Collectors.toList());

list<对象>,转换成 Set<String> 

Set<String> StrList = list.stream().map(UserDetailInfo::getPhone).collect(Collectors.toSet());

list 过滤 循环处理对象,如果年龄不为空 ,设置手机号为 110

list.stream().filter(s -> (s.getAge() != null )).forEach(s -> s.setPhone("110"));

根据手机号 分组 Map<String,List<对象>> ,比如每个老师带了几个班,每个省会下面多少个市,都可以这样查询处理

public static void main(String[] args) {

        List<UserDetailInfo> list = new ArrayList<>();
        UserDetailInfo info = null;
        for (int i = 1; i <= 9 ; i++) {
            info = new UserDetailInfo();
            info.setId(i);
            info.setName("张三:"+i);
            info.setAge("年龄:"+i);
            info.setPhone("110");
            list.add(info);
        }
        for (int i = 1; i <= 9 ; i++) {
            info = new UserDetailInfo();
            info.setId(i);
            info.setName("张三:"+i);
            info.setAge("年龄:"+i);
            info.setPhone("120");
            list.add(info);
        }


        Map<String,List<UserDetailInfo>> map = list.stream().collect(Collectors.groupingBy(UserDetailInfo::getPhone));
        
    }

  List<对象>  转 Map<String, List<String>>

Map<String,List<String>> map = list.stream()
                .collect(Collectors.groupingBy(StudentDto::getAge,Collectors.mapping(StudentDto::getName,Collectors.toList())));

List<对象>  多个字段分组转 Map<String, List<String>>

private String appId;

    private String i18nKey;

    private String tagId;

    public static void main(String[] args) {

        List<I18nRefTag> list = new ArrayList<>();

        for (int i = 0; i < 3 ; i++) {
            I18nRefTag tag = new I18nRefTag();
            tag.setTagId(i+"");
            tag.setAppId("edc");
            tag.setI18nKey("lk");
            list.add(tag);
        }

        for (int i = 0; i < 3 ; i++) {
            I18nRefTag tag = new I18nRefTag();
            tag.setTagId(i+"");
            tag.setAppId("ccp");
            tag.setI18nKey("dgz");
            list.add(tag);
        }

        Map<String, List<I18nRefTag>> groupedMap = list.stream().collect(Collectors.groupingBy(item -> (item.getAppId() + "#" + item.getI18nKey())));

        Map<String, List<String>> resultMap = groupedMap.entrySet().stream().collect(Collectors.toMap(
                Map.Entry::getKey,
                e -> e.getValue().stream().map(I18nRefTag::getTagId).collect(Collectors.toList())
        ));

        System.out.println(resultMap);

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值