通过合并到Kotlin转换Java流API toMap

通过合并到Kotlin转换Java流API toMap,java,kotlin,java-stream,Java,Kotlin,Java Stream,我需要将这个Java代码转换成优雅的Kotlin代码。目标是按最后一个元素对JSON数组io.vertx.core.JSON.JsonArray进行分组,如果组中的列值不同,则连接到以分号分隔的字符串,然后返回结果JSON数组列表。我试过这样的方法: list.groupingBy { it.getInteger(it.size() - 1) } .reduceTo... Java代码: List<JsonArray> list = Arrays.asList

我需要将这个Java代码转换成优雅的Kotlin代码。目标是按最后一个元素对JSON数组io.vertx.core.JSON.JsonArray进行分组,如果组中的列值不同,则连接到以分号分隔的字符串,然后返回结果JSON数组列表。我试过这样的方法:

  list.groupingBy { it.getInteger(it.size() - 1) }
      .reduceTo...
Java代码:

   List<JsonArray> list = Arrays.asList(new JsonArray("USD", 337301456, "a", 1),
                                        new JsonArray("USD", 337301456, "b", 1),
                                        new JsonArray("USD", 337301456, "c", 1),
                                        new JsonArray("EUR", 337301456, "a", 2),
                                        new JsonArray("EUR", 337301456, "b", 2)
                                        );

    List<JsonArray> result =
            new ArrayList<>(
                    list.stream()
                            .collect(Collectors.toMap(arr -> arr.getValue(arr.size() - 1),
                                    arr -> arr,
                                    (a1, a2) -> {
                                        JsonArray newArr = new JsonArray();
                                        for (int i = 0; i < a2.size() - 1; i++) {
                                            Object e1 = a1.getValue(i);
                                            Object e2 = a2.getValue(i);
                                            if (e1 == null)
                                                newArr.addNull();
                                            else if (e2 != null && !e2.equals(e1))
                                                    newArr.add(e1.toString() + ";" + e2.toString());
                                                 else newArr.add(e1);
                                        }
                                        return newArr;
                                    })).values());

    result.forEach(System.out::println);

直接翻译将是:

val结果=列表 .groupingBy{it.getValueit.size-1} .减少{},a1,a2-> val newArr=JsonArray 对于0中的i,直到a2.2尺寸-1{ val e1=a1.getValuei val e2=a2.getValuei 如果e1==null newArr.addNull 如果e2!=null&&e2!=e1,则为else 新建。添加$e1;$e2 其他的 newArr.add1 } 纽瓦尔 }.价值观
很遗憾,您的Java代码没有编译,您能确保它正在运行吗?我已经在@Yassin Hajaj再次刷新了它。这对我很管用,JsonArray。。。不是我们在Java中实例化对象的方式。如果e1==null,那么不管e2的值是多少,它都会被放弃。你确定这是故意的吗?
["USD",337301456,"a;b;c"]
["EUR",337301456,"a;b"]