【问题标题】:Mapping two List<> into HashMap将两个 List<> 映射到 HashMap
【发布时间】:2019-08-23 07:03:10
【问题描述】:

我有两个列表 ColumnIndexMapping 列表,另一个是字符串列表

一个列表包含一个类的对象。结构如下图-

public class ColumnIndexMapping {

    private int index;
    private String columnname;

    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    }
    public String getColumnname() {
        return columnname;
    }
    public void setColumnname(String columnname) {
        this.columnname = columnname;
    }
}

现在我必须使用这两个列表来制作地图。我必须从第二个列表(字符串列表)中读取那些我们在第一个列表中具有索引属性的索引。如下 -

List<ColumnIndexMapping> colMapList =  [
   {
     "index": 0,
     "columnname": "accountname"
   },
   {
     "index": 2,
     "columnname": "source"
   },{
     "index": 4,
     "columnname": "customField13"
   } ]

List<String> secondList = {"Nitin","India","1234","fnf","qwerty"}


Output would be -> 

HashMap<String,String> outputHashmap = 
{
"accountname":"Nitin",
"source":"1234",
"customField13":"qwerty"

}

用 Java7 尝试过的方法

Map<String, String> output = new HashMap<>();
for (ColumnIndexMapping colMap: colMapList) {
    output.put(colMap.getColumnname(), secondList .get(colMap.getIndex()));
}

现在在 Java8 中执行此操作的最佳方法是什么。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 这不是你在 Java 中定义 ListMap 的方式。请发布编译的代码。而且,是的,你还没有尝试过任何东西。您在 Java 7 中的方法是什么?
  • @Jason 我尝试使用 Java7 方法。只需使用 for 循环迭代两个列表,然后执行逻辑,但我想使用 Java8 来实现这一点
  • 为什么你降级了这个问题,我知道使用 java7 的解决方案,但我想使用 Java8 解决这个问题。
  • @nitintyagi 我投了反对票。您没有表现出任何努力(将一个 POJO 类和两个 JSON sn-ps 放入 Java 代码中,这使其无效)。您也没有展示如何通过标准方法解决问题。只要您编辑问题,我就愿意投票。

标签: java java-8 hashmap


【解决方案1】:

如果您正在寻找基于 Java 8 流的方法,可以使用以下方法。

Map<String, String> outputMap = colMapList.stream()
            .collect(Collectors.toMap(ColumnIndexMapping::getColumnname, 
                    (colMap) -> secondList.get(colMap.getIndex())));

【讨论】:

    【解决方案2】:

    假设你已经正确填充了colMapListsecondList,那么转换代码就比较简单了:

    List<ColumnIndexMapping> colMapList = ...; // assumed this is populated correctly
    List<String> secondList = ...;             // assumed this is populated correctly
    
    Map<String, String> output = new HashMap<>();
    for (ColumnIndexMapping mapping : colMapList) {
        output.put(mapping.getColumnname(), secondList.get(mapping.getIndex()));
    }
    

    【讨论】:

    • 我假设您已经检查了secondList 中是否有足够的条目来填充colMapList 指定的元素。
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2019-04-29
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多