java - 通过映射将2个列表合并为1个列表

标签 java

我有两个列表,每个列表包含来自包含 2 个元素(列)运算符和 id 的 sql 查询的行 我想用两个列表映射运算符并从两个列表中打印 id(id 将不同,对应于两个列表中的运算符)

运算符(operator)在这种情况下不能成为关键。

    **List 1**            **Lists 2**
  operator1, id1       operator4, id7
  operator1, id2       operator3, id8
  operator2, id3       operator2, id9
  operator2, id4       operator2, id10
  operator3, id5       operator1, id11
  operator4, id6       operator1, id12

最终输出应该是这样的

    **List3**
operator1, id1,id2,id11,id12
operator2, id3,id4,id9,id11
operator3, id5,id8
operator4, id6,id7

我可以用什么方式实现?

最佳答案

最简单的方法是使用 Map 按运算符分组。实际上,您可以使用 Map 而不是 List,但您也可以遍历 map 以附加键和值并将它们插入回列表。您可以使用以下代码来实现您想要的结果。

public static void main(String[] args) {
    List<Object> list1 = new ArrayList<Object>();
    list1.add("operator1, id1");
    list1.add("operator1, id2");
    list1.add("operator2, id3");
    list1.add("operator2, id4");
    list1.add("operator3, id5");
    list1.add("operator4, id6");

    List<Object> list2 = new ArrayList<Object>();
    list2.add("operator4, id7");
    list2.add("operator3, id8");
    list2.add("operator2, id9");
    list2.add("operator2, id10");
    list2.add("operator1, id11");
    list2.add("operator1, id12");

    Map<String, String> map = new HashMap<String, String>();
    List<Object> list3 = new ArrayList<Object>();

    Iterator<Object> it1 = list1.iterator();
    Iterator<Object> it2 = list2.iterator();

    while (it1.hasNext() && it2.hasNext()) {
        String[] line1 = ((String) it1.next()).split(",");
        map.put(line1[0], map.get(line1[0]) == null ? line1[1] : map.get(line1[0]) + ", " + line1[1]);

        String[] line2 = ((String) it2.next()).split(",");
        map.put(line2[0], map.get(line2[0]) == null ? line2[1] : map.get(line2[0]) + ", " + line2[1]);
    }

    for (Map.Entry<String, String> entry : map.entrySet()) {
        String item = entry.getKey() + "," + entry.getValue();
        System.out.println(item);
        list3.add(item);
    }
}

运行上面的代码后,结果将是:

operator4, id6,  id7
operator1, id1,  id2,  id11,  id12
operator3, id5,  id8
operator2, id3,  id4,  id9,  id10

关于java - 通过映射将2个列表合并为1个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13948391/

相关文章:

java - 带指针的C结构,如何Swig?

java - 为什么我在 getUploadUrl 上一次又一次收到错误的链接?它不工作

java - Java 中大字符串的唯一 String 对象

java - 对数组 clone() 的方法引用导致 NoClassDefFoundError : Array

java - 尝试将用户输入的短语打印成 V 形

java - Primefaces 用户界面 :repeat not working

java - 使用 RestAssured 的 JSON POST

java - 重新启动应用程序服务器时出现错误?

java - 创建一个 war 文件

Java 10 可执行文件在安装后不会执行