代码之家  ›  专栏  ›  技术社区  ›  Karthik

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

  •  0
  • Karthik  · 技术社区  · 8 年前

    我想根据下面提到的特定模式提取数组列表的子列表。请告知。

    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 回复  |  直到 8 年前
        1
  •  4
  •   shmosel    8 年前
    Map<String, List<String>> filesByPrefix = Filelist.stream()
            .collect(Collectors.groupingBy(s -> s.split("\\.")[0]));
    
        2
  •  2
  •   Apostolos Nirjal Mahat    8 年前

    或者经典的java7方式。

        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);
        }
    
        3
  •  1
  •   Charif DZ    8 年前

    试试看: 包装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);
            }
        }
    
    }