Java - 根据后缀从列表创建子列表

标签 java arraylist collections iterator sublist

我正在尝试根据后缀从列表创建子列表。

public class Test {

    public static void main(String args[]) {
        List<List<String>> subList = new ArrayList<List<String>>();

        List<String> myList = new ArrayList<String>();
        myList.add("Text_1");
        myList.add("XYZ_3");
        myList.add("ABC_1");
        myList.add("Text_2");
        myList.add("Text_3");
        myList.add("XYZ_1");
        myList.add("XYZ_2");
        myList.add("ABC_2");

        for (String item : myList) {
            List<String> tempList = new ArrayList<String>();
            String suffix = item.substring(item.lastIndexOf("_"));
            tempList.add(item);
            for (String value : myList) {
                if (value.endsWith(suffix) && !tempList.contains(value)) {
                    tempList.add(value);
                }
            }
            System.out.println(tempList);
        }
    }
}

我期待如下

// Text_1, ABC_1, XYZ_1
// Text_2, ABC_2, XYZ_2
// Text_3, XYZ_3

但实际情况是

[Text_1, ABC_1, XYZ_1]
[XYZ_3, Text_3]
[ABC_1, Text_1, XYZ_1]
[Text_2, XYZ_2, ABC_2]
[Text_3, XYZ_3]
[XYZ_1, Text_1, ABC_1]
[XYZ_2, Text_2, ABC_2]
[ABC_2, Text_2, XYZ_2]

感谢任何帮助。谢谢

最佳答案

尝试使用 TreeMap

import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;

public class QuickTester {

    public static void main(String[] args) {

        List<String> myList = new ArrayList<String>();
        myList.add("Text_1");
        myList.add("XYZ_3");
        myList.add("ABC_1");
        myList.add("Text_2");
        myList.add("Text_3");
        myList.add("XYZ_1");
        myList.add("XYZ_2");
        myList.add("ABC_2");

        TreeMap <String, ArrayList<String>> map = new TreeMap<>();

        for (String item : myList) {

            // contents[0] is value, contents[1] is suffix
            String [] contents = item.split("_");

            if(!map.containsKey(contents[1])) {
                ArrayList<String> values = new ArrayList<>();
                values.add(contents[0]);
                map.put(contents[1], values);
            }
            else {
                map.get(contents[1]).add(contents[0]);
            }
        }

        for(String key : map.keySet()) {
            System.out.println("Key: " + key);
            System.out.print("Values: ");
            for(String value : map.get(key)) {
                System.out.print(value + " ");
            }
            System.out.println();
        }
    }
}

输出:

Key: 1
Values: Text ABC XYZ 
Key: 2
Values: Text XYZ ABC 
Key: 3
Values: XYZ Text 

关于Java - 根据后缀从列表创建子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30997652/

上一篇:Java并发

下一篇:java - Java 程序剖析

相关文章:

java - Java内存模型中堆的实现

java - 如何在 RetroFit 中使用 Gson 转换器?

android - 如何将 ArrayList 对象绑定(bind)到 android GridView?

java - 如果 keySet() 维护 HashMap 的顺序,为什么我们需要 LinkedHashMap?

apache-flex - 在 Flex 中创建类型安全的集合

java - 添加重复项时,如何更新 TableView 中的行(而不是添加新行)? [JavaFX]

java - 使用扫描仪创建循环

java - 使用 Ektorp 调用 createAttachment 与 CouchDB 交互时出现 ClientProtocolException

java - 当我想在 ArrayList 中添加来自请求 json 的对象时

java - android - java - 带有 ArrayList 的 WeakReferences?