gpt4 book ai didi

java - 如何在同一个数组中组合两个元素?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:24 25 4
gpt4 key购买 nike

我有一个包含这样的二维数组

         String[][] twodarray = { { "grey", "value1", "beta"  },
{ "r", "name", "gender" , "value", "Female" },
{ "r", "name", "gender", "value", "Male" },
{ "r", "name", "exp", "value", "1" },
{ "r", "name", "exp", "value", "2" },
{ "red", "value1", "alpha" },
{ "blue", "value2", "alpha" },
};

我的目标是当有 2 个或更多元素 [a][0] 和 [a][2] 相同时,它将组合在一起并将元素组合为一个。

例如,[1][0] 和 [2][0],r 和[1][2] 和 [2][2],性别是一样的。

因此,它将合并为一个,如下所示。

{ "r", "name", "gender", "value", "Female", "Male"},

因此,我想要的输出如下

      final output:
results = { { "grey", "value1", "beta" },
{ "r", "name", "gender" , "value", "Female", "Male" },
{ "r", "name", "exp", "value", "1", "2" },
{ "red", "value1", "alpha" },
{ "blue", "value2", "alpha" },
};

我的情况如下

                for (int a=0; a < twodarray.length-1; a++)
{
if ((twodarray[a][0] == twodarray[a+1][0]) && (twodarray[a][2] == twodarray[a+1][2]))
}
}

我的问题是如何组合数组?

任何帮助将不胜感激。

最佳答案

首先,我将这些行收集到 Map<List<String>, List<String>> 中它按前缀(除最后一个字符串之外的每个字符串)对最终值(最后一个字符串)进行分组。然后我将 map 条目收集回二维字符串数组格式:

package samplejava;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class SampleJava {
public static void main(String[] args) {
String[][] twodarray = { { "grey", "value1", "beta" },
{ "r", "name", "gender" , "value", "Female" },
{ "r", "name", "gender", "value", "Male" },
{ "r", "name", "exp", "value", "1" },
{ "r", "name", "exp", "value", "2" },
{ "red", "value1", "alpha" },
{ "blue", "value2", "alpha" },
};
Map<List<String>, List<String>> groups;
groups = Arrays.stream(twodarray).collect(Collectors.groupingBy(
(String[] item)-> Arrays.asList(item).subList(0, item.length - 1),
Collectors.mapping(
(String[] item)-> item[item.length - 1],
Collectors.toList())));
String[][] result = groups.entrySet().stream()
.map(entry -> Stream.concat(entry.getKey().stream(),
entry.getValue().stream())
.toArray(String[]::new))
.toArray(String[][]::new);
for(String[] row: result) {
System.out.println(Arrays.toString(row));
}
}
}

但是,此方法不会保留项目的原始顺序。但是你没有说那是必要的。

关于java - 如何在同一个数组中组合两个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52354037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com