繁体   English   中英

如何将具有 object 作为密钥的 Map 列表转换为 Map?

[英]How to convert a List of Map that has object as key to Map?

我有一个存储库查询,它返回一个地图列表,如下所示:

@Query("SELECT new map(key(m), value(m) ) from User u join u.shopRoleMap m where u.usEmail = :email")
     List<Map<Shop,Role>> findByUserEmail(String email);

用户映射如下:

@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
    @JoinTable(name = "user_shop_role",
            joinColumns = @JoinColumn(name = "user_fk"), inverseJoinColumns = @JoinColumn(name = "role_fk"))
    @MapKeyJoinColumn(name = "shop_fk")
    private Map<Shop, Role> shopRoleMap = new HashMap<>();

在我的服务中,我需要将 map 作为Map<Shop,Role>以便我可以相应地获取键和值。 代码如下:

List<Map<Shop,Role>> shopRole= userRepository.findByUserEmail(email);

        for (Map<Shop,Role> map : shopRole){
            for (Map.Entry<Shop,Role> result : map.entrySet()){
                System.out.println("The key is: "+result.getKey());
                System.out.println("And the value is: "+result.getValue());
            }
        }
        }

我得到的结果有点奇怪,因为我预计result.getKey()会给我Shop作为键。 但是,我得到的键是 0 和 1。

The key is: 0
And the value is: Shop{id=54, sh_name='Frefdv', sh_icon='icon url', sh_description='Fashion Shop', sh_tag='metadata', uuid='99dba3d5-dfaa-446d-9649-b9b98f422f87', sh_enabled='N', created_at=2020-07-30T15:54:10, updated_at=2020-07-30T15:54:10, created_by='e0b009ef-27c2-405b-961a-86f199b15167', updated_by='e0b009ef-27c2-405b-961a-86f199b15167'}
The key is: 1
And the value is: Role{id=0, roleName='ADMIN'}
The key is: 0
And the value is: Shop{id=55, sh_name='fnhfh', sh_icon='icon url', sh_description='Fashion Shop', sh_tag='metadata', uuid='e3ccdbdf-aad2-43ba-8331-91b2c2c01853', sh_enabled='N', created_at=2020-07-30T15:54:23, updated_at=2020-07-30T15:54:23, created_by='e0b009ef-27c2-405b-961a-86f199b15167', updated_by='e0b009ef-27c2-405b-961a-86f199b15167'}
The key is: 1
And the value is: Role{id=0, roleName='ADMIN'}

如何将此List<Map<Shop,Role>>转换为 map 以获取键值对?

有问题的 HQL 实际上是返回List<Map<String, Object>>

SELECT new map(key(m), value(m) ) from User u join u.shopRoleMap m where u.usEmail = :email

新 map的语法基本上需要这些值。 因此,当将 key(m) 和 value(m) 传递给它时, key(m) 和 value(m) 将被视为 Map 值。 map的关键基本上是索引值(0,1,2,..)

You can read more about it in the Hibernate Documentation - https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#hql-select-clause

在此处输入图像描述

因此,您应该将 HQL 替换为

SELECT entry(m) from User u join u.shopRoleMap m where u.usEmail = :email

这应该返回List<Map.Entry<Shop,Role>>可以迭代以获得正确的结果。

转换列表<object>映射<div id="text_translate"><p>我有一个包含四个字段的Employee类:id、name、department 和 email。 我创建了五个对象,设置了值并将它们全部添加到列表中。</p><p> 现在,我想将该列表转换为地图,但我做不到。 供您参考,这是我尝试过的代码</p><pre>Employee emp1 = new Employee("1", "Mayank", "HR", "mayank@gmail.com"); Employee emp2 = new Employee("2", "Mahesh", "Trainer", "Mahesh@gmail.com"); Employee emp3 = new Employee("3", "Vipul", "SEO", "Vipul@gmail.com"); Employee emp4 = new Employee("4", "Ajay", "Devlopwr", "Ajay@gmail.com"); Employee emp5 = new Employee("5", "Rakesh", "Marketing", "Rakesh@gmail.com"); //add class object to list List &lt; Employee &gt; listWmp = new ArrayList &lt; &gt; (); listWmp.add(0, emp1); listWmp.add(1, emp2); listWmp.add(2, emp3); listWmp.add(3, emp4); listWmp.add(4, emp5); System.out.println("list elements are: " + listWmp); //convert the list into map Map &lt; String, Employee &gt; listMap = new HashMap &lt; &gt; (); for (Employee employee: listWmp) { listMap.put(employee.getEmpId(), employee.getEmpBame()); }</pre><p> 如何将列表转换为地图?</p></div></object>

[英]convert List<object> to map

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将 List 转换为 Map 并使 map 成为对象属性的键 将值列表转换为地图<key, List<Object> &gt; 转换列表<object>映射<div id="text_translate"><p>我有一个包含四个字段的Employee类:id、name、department 和 email。 我创建了五个对象,设置了值并将它们全部添加到列表中。</p><p> 现在,我想将该列表转换为地图,但我做不到。 供您参考,这是我尝试过的代码</p><pre>Employee emp1 = new Employee("1", "Mayank", "HR", "mayank@gmail.com"); Employee emp2 = new Employee("2", "Mahesh", "Trainer", "Mahesh@gmail.com"); Employee emp3 = new Employee("3", "Vipul", "SEO", "Vipul@gmail.com"); Employee emp4 = new Employee("4", "Ajay", "Devlopwr", "Ajay@gmail.com"); Employee emp5 = new Employee("5", "Rakesh", "Marketing", "Rakesh@gmail.com"); //add class object to list List &lt; Employee &gt; listWmp = new ArrayList &lt; &gt; (); listWmp.add(0, emp1); listWmp.add(1, emp2); listWmp.add(2, emp3); listWmp.add(3, emp4); listWmp.add(4, emp5); System.out.println("list elements are: " + listWmp); //convert the list into map Map &lt; String, Employee &gt; listMap = new HashMap &lt; &gt; (); for (Employee employee: listWmp) { listMap.put(employee.getEmpId(), employee.getEmpBame()); }</pre><p> 如何将列表转换为地图?</p></div></object> 如何转换列表<map<string, object> > 列出<map<string, string> > </map<string,></map<string,> 如何将列表转换为 Map 的 Map 转换列表<Map>列出<Map<String,Object> &gt; 如何将Map转换为用户对象列表? 如何将字符串和对象的映射转换为字符串和列表的映射 如何转换列表<map<string,object> > 至 Map<string, string> ? </string,></map<string,object> 如何将地图转换为对象
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM