Java:基于模式提取arraylist的子列表

时间:2016-07-15 16:27:23

标签: java arraylist sublist

我想要根据特定模式提取数组列表的子列表,如下所述。请指教。

ArrayList<String> Filelist=new ArrayList<String>();
Filelist.add("abc.123");
Filelist.add("abc.456");
Filelist.add("def.123");
Filelist.add("def.456");

这里我需要以第一个索引开头的任何内容,比如说abc要存储在单独的子列表中,而任何以def开头的内容都需要存储在单独的子列表中。数组列表将有多个这样的条目,因此必须相应地创建单独的子列表。

3 个答案:

答案 0 :(得分:4)

Map<String, List<String>> filesByPrefix = Filelist.stream()
        .collect(Collectors.groupingBy(s -> s.split("\\.")[0]));

答案 1 :(得分:2)

或经典的java 7方式。

    Map<String, List<String>> map = new HashMap<>();
    for (String str : lst) {
        String[] splt = str.split("\\.");
        if (!map.containsKey(splt[0])) {
            map.put(splt[0], new ArrayList<>());
        }
        map.get(splt[0]).add(str);
    }

答案 2 :(得分:1)

尝试一下: package main_package;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Stackkkk {

    static ArrayList<ArrayList<String>> pattern_lists=new ArrayList<ArrayList<String>>();
    public static void main(String[] args) {
        ArrayList<String> Filelist=new ArrayList<String>();
        Filelist.add("abc.123");
        Filelist.add("abc.456");
        Filelist.add("def.123");
        Filelist.add("def.456");        
        Filelist.add("def.456");
        Filelist.add("def.456");
        Filelist.add("de1.456");
        Filelist.add("de1.456");
        Filelist.add("de1.456");
        Filelist.add("de1.456");
        Filelist.add("de1.456");

        for(int i=0;i<Filelist.size();i++)
            add_to_list(Filelist.get(i));
        System.out.println("number of pattern found are :"+pattern_lists.size());
        for(int i=0;i<pattern_lists.size();i++)
          System.out.println("number of value in pattern "+i+" :"+pattern_lists.get(i).size());

    }

    public static void add_to_list(String value){
        boolean pattern_found=false;
        for(int i=0;i<pattern_lists.size();i++){
            if(pattern_lists.get(i).get(0).startsWith(value.substring(0, 3))){
                //pattern found add it to this list 
                pattern_lists.get(i).add(value);
                pattern_found=true;
            }
        }
        if(!pattern_found){
            //create new list and add the value
            ArrayList<String> new_list=new ArrayList<String>();
            new_list.add(value);
            pattern_lists.add(new_list);
        }
    }

}