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