精华内容
下载资源
问答
  • UserDto中UserId字段作为key,每个UserDto作为Value List<UserDto> dtoList= BeanHelper.... map = UserDto.stream().filter(dto -> StringUtil.isNotBlank(dto.getUserId())).collect(Collectors

    UserDto中UserId字段作为key,每个UserDto作为Value

    List<UserDto> dtoList= BeanHelper.copyProperties(list, UserDto.class);
    Map<String, List<UserDto>> map = dtoList.stream().filter(dto -> StringUtil.isNotBlank(dto.getUserId())).collect(Collectors.groupingBy(UserDto::getUserId);
    
    
    展开全文
  • Map<String,List<Entity>> Map<String, List<Entity>> dataMap = dataList.stream().collect( Collectors.toMap(x -> String.format("%s:%s", x.getId(), x.getName()), obj -&...

    概述:
        将一个List<Entity>转成Map<String,List<Entity>>

    import com.google.common.collect.Lists;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    Map<String, List<Entity>> dataMap = dataList.stream().collect(
    	Collectors.toMap(x -> String.format("%s:%s", x.getId(), x.getName()), 
    		obj -> Lists.newArrayList(obj),
    		(List<Entity> newValueList, List<Entity> oldValueList) ->
            {
                oldValueList.addAll(newValueList);
                return oldValueList;
            }));
    

        将一个List<Entity>转成Map<String,List<String>>

    import com.google.common.collect.Lists;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    Map<String, List<Entity>> dataMap = dataList.stream().collect(
    	Collectors.toMap(x -> x.getId(), obj -> Lists.newArrayList(obj.getAttr()),
    	(List<String> newValueList, List<String> oldValueList) ->
            {
                oldValueList.addAll(newValueList);
                return oldValueList;
            }));
    
    展开全文
  • 主要介绍了详解Java8新特性Streamlist转map及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以...
  • java stream list转map

    千次阅读 2020-07-29 10:26:37
    StreamList转换为Map,使用Collectors.toMap方法进行转换 背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象 1、指定key-value,value是对象中的某个属性值。 Map<Integer,...

    java 8 使用stream流来对集合进行处理:

    Stream将List转换为Map,使用Collectors.toMap方法进行转换

    背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象

    1、指定key-value,value是对象中的某个属性值

     Map<Integer,String> userMap1 = userList.stream().collect(Collectors.toMap(User::getId,User::getName));

    2、指定key-value,value是对象本身,User->User 是一个返回本身的lambda表达式

    Map<Integer,User> userMap2 = userList.stream().collect(Collectors.toMap(User::getId,User->User));

    3、指定key-value,value是对象本身,Function.identity()是简洁写法,也是返回对象本身

     Map<Integer,User> userMap3 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

    4、指定key-value,value是对象本身,Function.identity()是简洁写法,也是返回对象本身,key 冲突的解决办法,这里选择第二个key覆盖第一个key

     Map<Integer,User> userMap4 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(),(key1,key2)->key2));

    注意:用Collectors的toMap方法转换List,一般会遇到两个问题。一个是转换map,key重复问题;另一个是空指针异常,即转为map的value是null。
    问题解决!!!
    一、第一种问题报的错误如下:Duplicate key
    在这里插入图片描述

    使用(key1,key2)->key2表达式可以解决此类问题,如果出现重复的key就使用key2覆盖前面的key1,也可以定义成(key1,key2)->key1,保留key1,根据自己的业务场景来调整。

     

     

     

    当使用二个list集合,根据某个值来给你list赋值时,我们之前都是采用双层for循环来实现,现在我们可以使用stream()+lamda表达式来提升效率

    实例如下:

    首先创建两个对象男生和女生:

    // 男生 get set和toString这里省略
    public class SchoolBoy {
        private String girlId;
        
        private String id;
        
        private String name;
     
        private String grilName;
    }
    // 女生 get set和toString这里省略
    public class Girl {
        private String id;
     
        private String name;
    }
    根据男生对象中的girlId去匹配女生对象并把男生对象的grilName字段赋值

    下面展示一个demo

    public static void main(String[] args) {
        List<SchoolBoy> schoolBoys = new ArrayList<>(3);
        SchoolBoy boy1 = new SchoolBoy();
        boy1.setGirlId("1");
        boy1.setId("10");
        boy1.setName("小明");
     
        SchoolBoy boy2 = new SchoolBoy();
        boy2.setGirlId("2");
        boy2.setId("11");
        boy2.setName("小豪");
     
        SchoolBoy boy3 = new SchoolBoy();
        boy3.setGirlId("3");
        boy3.setId("12");
        boy3.setName("小白");
        schoolBoys.add(boy1);
        schoolBoys.add(boy2);
        schoolBoys.add(boy3);
     
        List<Girl> girls = new ArrayList<>(3);
        Girl girl1 = new Girl();
        girl1.setId("1");
        girl1.setName("小英");
     
        Girl girl2 = new Girl();
        girl2.setId("2");
        girl2.setName("小美");
     
        Girl girl3 = new Girl();
        girl3.setId("3");
        girl3.setName("小花");
        girls.add(girl1);
        girls.add(girl2);
        girls.add(girl3);
        
        List<SchoolBoy> list = schoolBoys.stream()
            .map(schoolBoy -> girls.stream()
                    .filter(girl -> schoolBoy.getGirlId().equals(girl.getId()))
                    .findFirst()
                    .map(girl -> {
                        schoolBoy.setGrilName(girl.getName());
                        return schoolBoy;
                    }).
    orElse(null))
            .collect(Collectors.toList());
        System.out.println(list.toString());
    }

    最后执行的结果:

    [SchoolBoy [girlId=1, id=10, name=小明, grilName=小英],

    SchoolBoy [girlId=2, id=11, name=小豪, grilName=小美],

    SchoolBoy [girlId=3, id=12, name=小白, grilName=小花]]

    这个表达式有一个orElse(null)这里要注意一下:通过修改id来出现id没有匹配的话,就返回null,

    [SchoolBoy [girlId=1, id=10, name=小明, grilName=小英],

    SchoolBoy [girlId=2, id=11, name=小豪, grilName=小美],

    null]

    少行数据,这样显然不是我们想要的,这里我们做了改成

    我们使用orElse(schoolBoy),这样只是不在schoolBoy中设置name值而已。但不至于少一行数据

    [SchoolBoy [girlId=1, id=10, name=小明, grilName=小英],

    SchoolBoy [girlId=2, id=11, name=小豪, grilName=小美],

    SchoolBoy [girlId=3, id=12, name=小白, grilName=null]]

    展开全文
  • 场景是List中存储一些对象集合,需求是按照对象中的某一个属性进行分组转换为Map结构 常规做法: 骚气做法:

    场景是List中存储一些对象集合,需求是按照对象中的某一个属性进行分组转换为Map结构

    常规做法:
    在这里插入图片描述

    骚气做法:
    在这里插入图片描述

    展开全文
  • public Map<Long, Account> getIdAccountMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account)); }
  • 记录一下使用stream流List的常用操作以便以后忘了的时候查看,先准备下测试数据 public static List<Goods> getList(){ Goods goods = Goods.builder().id(1L).goodsName("测试").goodsAddress("济南")....
  • Java8新特性Streamlist转map及问题解决

    万次阅读 多人点赞 2018-10-11 14:57:44
    List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap 具体用法实例如下: //声明一个List集合 List&amp;lt;Person&amp;gt; list = new ArrayList(); list.add(new Person(&...
  • JAVA-Stream-List转换Map

    千次阅读 2018-08-04 14:57:10
    使用Java8的Stream Api,将List转换成Map非常方便。 /** * @author wzx * @time 2018/8/4 */ public class ListToMapTest { public static void main(String[] args) { List&lt;Person&gt; persons...
  • 常用方式 ...accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername)); } 收集成实体本身map 代码如下: public Map<Long, Account> getIdAccountMap(List<Acc
  • Java8 stream流的操作 maplist转换

    千次阅读 2021-02-04 16:38:34
    Java8 stream流的操作 1. 将map的所有value转换成list //创建map并塞两个值 Map<String, String> userObjHashMap = new HashMap<>(); userObjHashMap.put("user1","hello"); userObjHashMap.put(...
  • StreamList转Map的坑

    千次阅读 2020-08-02 16:27:06
    常规 list map 的方法: Map<String, String> map = new HashMap<>(); for (User user : list) { map.put(user.getName(), user.getAddress()); } 这种方式没什么问题,就是代码不够简洁美观,...
  • 在项目中需要将list转map形式,采用java8的stream流 mileageList.stream().collect(Collectors.toMap(MileageMonitorDto::getId,MileageMonitorDto::getValue,(k1,k2)->k1)); 测试中无问题,发布线上,发现...
  • collect = parkingImgs.stream().collect(Collectors.toMap(ParkingImg::getPARKING_ID, e -> new ArrayList<>(Arrays.asList(e)), (List<ParkingImg> oldList, List<Parkin...
  • name='苹果1', money=3.25, num=10}, Apple{id=1, name='苹果2', money=1.35, num=20}], 2=[Apple{id=2, name='香蕉', money=2.89, num=30}], 3=[Apple{id=3, name='荔枝', money=9.99, num=40}]} 2、List转Map id...
  • list--转map 方式一 Map<String, OrganizationVO> groupMap = new HashMap<>();//有权限的采购组织 if(CollectionUtils.isNotEmpty(groupList)){ groupMap = groupList.stream().collect(Ma...
  • 主要介绍了JDK8通过StreamListMap操作和互的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 在使用StreamList转化为Map的时候,抛出了java.lang.IllegalStateException: Duplicate key异常,原因在于生成Map的key出现冲突。 查看如下代码: 当我们根据猫的名字创建名称Map的时候,发现有2个相同的cat2,...
  • Java stream List Map<Object, List> JAVA中的Stream操作一定程度上方便了数据的转换,List转Map的场景下,针对downStream的操作一般较少遇到,遇到的时候一时间也不容易想到处理方式,这里记录一下。 ...
  • ** 这是我自己编写的排序代码: ** list.stream().sorted(Comparator.comparing(map -> Integer.parseInt(map.get("monthtime").toString()))).collect(Collectors.toList()); 看一下Comparator.comparing的源码: ...
  • totalMap = ListMap.stream().collect( Collectors.toMap(x -> x.get(key).toString(), x -> Integer.valueOf(x.get(Key).toString()))); key 为map中的 key值 ,上述表达式的意思是 ...
  • JDK8使用Stream的把List使用流式Stream转成LinkedHashMap Map> tbmFactorConfigMap = tbmFactorConfigList.stream().collect(Collectors.groupingBy(TbmFactorConfig::getFactorValue, LinkedHashMap::new, ...
  • 2的数据:查询有效的(valid = true)数据:Stream转List排序age升序age降序根据性别gender升序排,再以年龄age升序根据性别gender升序排,再以年龄age降序根据性别gender降序排,再以年龄age升序根据性别gender降序排,再...
  • 使用stream流List分组求和: public class Test2 { public static void main(String[] args) { List<Map<String,String>> list = new ArrayList<>(); Map<String,String> map1 = new ...
  • StreamList转为Map汇总

    千次阅读 2020-09-25 09:49:05
    StreamList转换为Map,使用Collectors.toMap方法进行转换。 背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象 1、指定key-value,value是对象中的某个属性值。 Map<...
  • java8 stream 转换listmap、set

    千次阅读 2021-01-03 21:47:39
    一、Collection, Collections, collect, Collector, Collectos Collection是Java集合的祖先接口。 Collections是java.util包下的一个工具类,...)是Stream的一个函数,负责收集。 java.util.stream.Collector 是一个
  • import java.util.List; import java.util.Map; public class Test { public static void main(String[] args) { List<Map<String, String>> list = new ArrayList<>(); .
  • package com.pigg.study.tree.common.stream; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;...import java.util.stream.Collectors; import java....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,377
精华内容 44,550
关键字:

stream流list转map