怎么用Lambda遍历List<Map<String,Object>>得到Map<String,String>?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用Lambda遍历List<Map<String,Object>>得到Map<String,String>?相关的知识,希望对你有一定的参考价值。

public static void main(String[] args)
List<Map<String, Object>> testList = Lists.newArrayList();
Map<String, Object> m1 = Maps.newHashMap();
m1.put("a", "a1");
m1.put("b", "b1");
m1.put("x", "x1");
Map<String, Object> m2 = Maps.newHashMap();
m1.put("a", "a2");
m1.put("b", "b2");
m1.put("x", "x2");
Map<String, Object> m3 = Maps.newHashMap();
m1.put("a", "a3");
m1.put("b", "b3");
m1.put("x", "x3");
testList.add(m1);
testList.add(m2);
testList.add(m3);

// Map<String, String> result = testList.stream().....
// 要求最终结果:a1=b1,a2=b2,a3=b3

public static void main(String[] args) throws Exception
List<Map<String, Object>> testList = new ArrayList<>();
Map<String, Object> m1 = new HashMap<>();
m1.put("a", "a1");
m1.put("b", "b1");
m1.put("x", "x1");
Map<String, Object> m2 = new HashMap<>();
m2.put("a", "a2");
m2.put("b", "b2");
m2.put("x", "x2");
Map<String, Object> m3 = new HashMap<>();
m3.put("a", "a3");
m3.put("b", "b3");
m3.put("x", "x3");
testList.add(m1);
testList.add(m2);
testList.add(m3);
Map<String, String> m4 = new HashMap<>();
testList.stream().forEach(m ->
m4.put((String) m.get("a"), (String) m.get("b"));
);
m4.forEach((x, y) ->
System.out.println(x + y);
);
System.out.println("end");
追问

只能这样吗?不能一个链式操作直接返回一个map吗

追答

我觉得是可行,但是我技术也没达到

参考技术A Map<String, String> map = testList.stream().collect(HashMap::new,(k, v) ->k.put(String.valueOf(v.get("")), String.valueOf(v.get(""))),HashMap::putAll);

javaweb应用,dto怎么遍历

我现在有个dto,比如里面有菜名,菜类型,价格,要用遍历根据不同菜类型把dto分开,怎么做

1、java中,dto是从db查询出来后放在list中的,所以需要遍历list。

2、java中遍历list示例:
List<String> list = new ArrayList<String>();
list.add(new DTO());

for(int i = 0; i < list.size(); i++)

list.get(i); //获取
System.out.println(list.get(i));


2、DTO (Data Transfer Object)数据传输对象,主要用于远程调用等需要大量传输对象的地方。
比如有一张表有100个字段,那么对应的PO就有100个属性。
但是业务界面上只要显示10个字段, 客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端, 这时就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO(值对象)。
参考技术A 使用Collections

追问

大概具体怎么写,我不会

参考技术B 你应该是 拿到了 DTO的一个List把,我们项目用的是jsp 标签,希望可以给你一个思路:
<tbody>
      <c:forEach var="dto"
             items="$dtoList">
            <tr>
                      <td>$dto.xx</td>
                         <td>$dto.xxx</td>           
                 </tr>
                            </c:forEach>
    </tbody>

参考技术C class DTO
    private int value;
    pirvate String name;
    public void setValue(int value)
       this.value = value;
    
    public void setName(String name)
       this.name= name;
    
    public String getName()
       return this.name;
    
    public String getValue()
       return this.value;
    

import java.util.ArrayList;
import java.util.List;
class Test
    public static void main(String args[])
       List list = new ArrayList<DTO>();
       DTO dto1 = new DTO();
       dto1.setName("a");
       DTO dto2 = new DTO();
       dto1.setName("b");
       DTO dto3 = new DTO();
       dto1.setName("c");
       list.add(dto1);
       list.add(dto2);
       list.add(dto3);
       for(DTO o:list)
          if(o.getName.equals("a"))
              ..........
          
       
    

本回答被提问者采纳

以上是关于怎么用Lambda遍历List<Map<String,Object>>得到Map<String,String>?的主要内容,如果未能解决你的问题,请参考以下文章

用Struts2在页面上遍历两个集合.一个是list一个是Map我要怎么区分遍历?

求教arraylist里面放map,怎么循环遍历得到map里面的数据,如:List<Map<String, String>> list = new Ar

map里面放的list,list放的是对象,怎么遍历

Java lambda 怎么在list转换map时,把多个参数拼接作为key

jsp用<iterator>遍历数据 如何获取遍历的值

如何使用 Java lambda 遍历列表映射并返回单个值? [复制]