如何将列表分成两个列表?

时间:2016-08-18 06:27:52

标签: java

here is a big list ,I want to separate this list into two lists according to "A7750" and "A7741" 我也尝试编写代码来实现它,但它失败了

public class Test {
     public static void main(String[] args) {
    ArrayList<String> list=new ArrayList<String>();
    ArrayList<String> list1=new ArrayList<String>();
    list.add("A7750 0.0 28.30");
    list.add("A7750 0.3 28.30");
    list.add("A7741 0.0 31.40");
    list.add("A7741 0.1 31.40");
    Boolean tag=true;
    for(int i=0;i<list.size();i++){
        if(i>=1){
        String str[]=list.get(i).split("\t");  
        String str1[]=list.get(i-1).split("\t");
        if(tag){
            list1.add(list.get(i-1));   
            if(!str[0].equals(str1[0])){
                for(String t:list1){
                    System.out.println(t);
                }
                list1.clear();
                System.out.println("...");
            }
            }
        }

        }



     }
}

4 个答案:

答案 0 :(得分:1)

您可以使用String.startsWith检查列表中的每个字符串,从您想要的内容开始,并添加到相应的新列表中。

for(String element: bigList){
    if(element.startsWith("A7750")){
        list1.add(element);
    }
    else if(element.startsWith("A7741")){
        list2.add(element);
    }
}

修改

如果您有数千行,则可以使用Map存储列表,如下所示。

Map<String,List<String>> map=new HashMap<>();
for(String element: bigList){
    // Split each element by space.
    String parts=element.split(" ");

    // if the map contains your key ex: "A7741", add the string to the corresponding list.
    if(map.containsKey(parts[0])){
        List<String> list = map.get(parts[0]);
        list.add(element);
    }else{
        // create a new list and add it to the map with a new key.
        List<String> list = new ArrayList<>();
        list.add(element);
        map.put(parts[0],list);
    }
}

最后,地图会有一组列表,其中每个条目key是其元素所盯着的字符串。

我假设您的字符串的格式类似于A7750 0.0 28.30

答案 1 :(得分:0)

这是一个应该做你想做的测试课:

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        Map<String, List<String>> tagMap = new HashMap<>();
        // Populate the list
        list.add("A7750 0.0 28.30");
        list.add("A7750 0.3 28.30");
        list.add("A7741 0.0 31.40");
        list.add("A7741 0.1 31.40");
        list.add("A7752 0.5 31.40");
        list.add("A7752 0.7 31.40");

        // Loop through all the entries
        for (String entry : list) {
            // Split on space to get the tag
            String tag = entry.split(" ")[0];
            // Get the list of data starting with this tag
            List<String> tagList = tagMap.get(tag);
            if (tagList == null) {
                // If there are no other entries for tag yet, add a
                // new list to the map
                tagList = new ArrayList<>();
                tagMap.put(tag, tagList);
            }
            // Add the current entry to the list
            tagList.add(entry);
        }

        // Print out the results
        for (Map.Entry<String, List<String>> entry : tagMap.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

最后,tagMap将包含从每个标记到以该标记开头的条目列表的映射。要获取给定标记的条目列表(例如A7750),请执行以下操作:tagMap.get("A7750");

答案 2 :(得分:0)

我发现了一些你可以纠正的事情。

  1. 分割必须发生在空格字符上(&#34;&#34;)而不是&#34; \ t&#34;字符。
  2. 将第一个元素直接添加到另一个列表并应用后续元素的检查。
  3. 另外,为了简单起见,我添加了一个新列表。

    您可以使用:

        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<String>();
            ArrayList<String> list1 = new ArrayList<String>();
            ArrayList<String> list2 = new ArrayList<String>();
            list.add("A7750 0.0 28.30");
            list.add("A7750 0.3 28.30");
            list.add("A7741 0.0 31.40");
            list.add("A7741 0.1 31.40");
            String str[] = list.get(0).split(" ");
            list1.add(list.get(0));
            for (int i = 1; i < list.size(); i++) {
                String str1[] = list.get(i).split(" ");
                boolean tag = str[0].equals(str1[0]);
                if (tag) {
                    list1.add(list.get(i));
                } else {
                    list2.add(list.get(i));
                }
            }
            System.out.println(list1);
            System.out.println(list2);
        }
    

    希望这有帮助!

答案 3 :(得分:0)

您必须使用end来保存标签及其列表。通过这样做,您可以根据标记轻松找到列表。这应该适合你:

Map