首页 > 解决方案 > 在 ArrayList 中“合并”多个相同类型的元素

问题描述

我有一个名为 ADVAObject 的类,带有一个变量“类型”和“值”:

public class ADVAObject {
   String type = "";
   String value = "";
}

然后,我做了一些ArrayList<ADVAObject> pattern = new ArrayList<ADVAObject>();. 经过一些处理后,我最终使用了以下列表:

for(ADVAObject a : pattern) {
   System.out.println(a.type + " : " + a.value);
}

名单:

STRING : V
STRING : A
STRING : R
STRING : I
STRING : A
STRING : B
STRING : L
STRING : E
SPACE : null
SPECIAL : null
SPACE : null
NUMBER : 3
NUMBER : 4
SPACE : null
DIV : null
SPACE : null
NUMBER : 5
NUMBER : 6
SPACE : null
QUESTION : null

如您所见,我没有得到“变量”,而是将其分开。目前这不是问题。“目前”?是的。你看,我想让它们分开来做额外的处理,但现在我需要“合并”,正如这个问题的标题所说,所有重复的元素都有一个值(不为空)。所以:

//This:
STRING : AB
STRING : CD
STRING : EF

//Turns into this:
STRING : ABCDEF

//However, ...:

//This:

SPACE : null
SPACE : null

//Can't turn into this:

SPACE : null

//.

我尝试创建一个单独的数组并在一些循环中对其进行正则表达式,但它没有......按预期工作。

标签: javaarraysclassarraylist

解决方案


您应该查看的内容,而不是数组列表,可以是带有链表的 HashMap,或者是数组列表,因为它的参数如下:

编辑:更改ArrayList<String>ArrayList<ADVAObject>与您正在使用的课程保持一致

HashMap<String, ArrayList<ADVAObject>> keyValues = new HashMap<>(); 

这样,即使存在重复项,您也可以映射每个值,例如,STRING 可能是键,其值将是:ABCDEF。

注意:要处理看到的重复值,您可以只使用一个仅添加重复值之一的条件语句

希望这可以帮助 :)


推荐阅读