【问题标题】:"Merge" multiple elements of the same type in an ArrayList在 ArrayList 中“合并”多个相同类型的元素
【发布时间】:2020-10-20 00:55:36
【问题描述】:

我有一个名为 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

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

//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

//.

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

【问题讨论】:

    标签: java arrays class arraylist


    【解决方案1】:

    你应该研究的,而不是数组列表,可以是一个带有链表的 HashMap,或者一个数组列表,因为它的参数如下:

    编辑:将 ArrayList<String> 更改为 ArrayList<ADVAObject> 以与您使用的课​​程保持一致

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

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

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

    希望这会有所帮助:)

    【讨论】:

    • 你好,事实证明,虽然比我以前的更好,但你的两个答案都不起作用,因为 A,它们改变了元素的顺序,例如。而不是 STRING : a;编号:7; DIV : null,它可能会更改为 DIV: null;字符串:一个; NUMBER: 7。第二个问题是,如果我有 NUMBER : 5;空间:空; NUMBER : 5,我不想将第一个 NUMBER 和第二个 NUMBER 组合起来,因为它们之间用空格隔开。
    • 这些是您可以使用条件语句处理的事情,就像我的回答所说的那样,对于排序,您可以执行以下操作:geeksforgeeks.org/sorting-hashmap-according-key-value-java
    • 对于数字,您可以说“如果它们之间有空格,则将它们计为单独的条目”
    【解决方案2】:

    您可以使用for 循环进行一些简单的List 处理。请参阅下面的代码here

    final List<ADVAObject> result = new ArrayList<>(pattern.size());
    for (int i = 0, size = pattern.size(); i < size; i++) {
        final ADVAObject curr = pattern.get(i);
        if (i == 0 || !pattern.get(i - 1).type.equals(curr.type)) {
            result.add(curr);
        } else {
            result.get(result.size() - 1).value += curr.value;
        }
    }
    

    【讨论】:

    • 不知道这是否正是他所要求的,他想要一个值,指向许多其他值,这就是为什么我建议使用带有字符串作为键的 HashMap,它分配给字符串数组列表
    • 你好,事实证明,虽然比我以前的更好,但你的两个答案都不起作用,因为 A,它们改变了元素的顺序,例如。而不是 STRING : a;编号:7; DIV : null,它可能会更改为 DIV: null;字符串:一个; NUMBER: 7。第二个问题是,如果我有 NUMBER : 5;空间:空; NUMBER : 5,我不想将第一个 NUMBER 和第二个 NUMBER 组合起来,因为它们之间用空格隔开。
    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多