【问题标题】:Quick way to merging similar items in a list in java在java中合并列表中相似项目的快速方法
【发布时间】:2012-02-01 14:52:55
【问题描述】:

例如我有这个列表:

myList = ['2','3','a','b','c','3','5','£','a','4',5','=']

如果它们彼此相邻,我想将相似的元素合并在一起。 所以我想得到一个新的列表,像这样:

newList = ['23', 'abc', '35', '£', 'a', '45', '=']

【问题讨论】:

  • 如何定义“相似”元素?
  • 快速说明:' 仅对 Java 中的字符有效,对字符串无效。至于问题,有一个最简单的解决方案,就是检查字符值,看看它是否与前一个在同一个“类”(您定义的)中。
  • 您如何将23 转换为23 并以类似方式分组?
  • 列表中的元素是否应该保持相同的类型、原始类型或其他类型?您的示例也需要澄清这一点:“2”是有效字符,“23”不是。
  • 请指定newList的类型

标签: java list merge


【解决方案1】:

您需要定义一个方法来测试相似度,并使用它来将字符组合成一个字符串。

public static void main(String... args) throws Exception {
    List<Character> myList = Arrays.asList('2', '3', 'a', 'b', 'c', '3', '5', '£', 'a', '4', '5', '=');
    List<String> grouped = new ArrayList<>();
    StringBuilder group = new StringBuilder();
    String prevType = null;
    for (Character ch : myList) {
        String type = typeOf(ch);
        if (prevType != null && type != prevType) {
            grouped.add(group.toString());
            group.setLength(0);
        }
        group.append(ch);
        prevType = type;
    }
    grouped.add(group.toString());
    System.out.println("myList= " + myList);
    System.out.println("newList= " + grouped);
}

private static String typeOf(Character ch) {
    return Character.isDigit(ch) ? "digit" :
            Character.isAlphabetic(ch) ? "alpha" :
                    "other";
}

打印

myList= [2, 3, a, b, c, 3, 5, £, a, 4, 5, =]
newList= [23, abc, 35, £, a, 45, =]

【讨论】:

    【解决方案2】:

    我会读取列表中的每个字符并将其转换为 int,以获得它的 ascii 代码。

    接下来你可以定义相似字符的代码范围——在这里你可以创建私有方法,比如isDigit(char c)isUpperLetter(char c)isSpecialCharacter(char c)isArabic(char c)等等。

    最后 - 在逐个字符读取列表时,您需要有一个标志通知您最后一个字符的类型 - 如果这个不一样 - 您开始为您连接新字符串 newList

    编辑:@refp 刚刚写了我在说什么;)

    【讨论】:

      【解决方案3】:

      您只需循环遍历项目,然后创建一个新列表,将合并的项目添加到其中。这似乎不是一个好问题。

      【讨论】:

        猜你喜欢
        • 2011-07-19
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        相关资源
        最近更新 更多