Java: 根据pattern提取arraylist的子列表

Java: Extracting sublist of arraylist based on pattern

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

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

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

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

或经典的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);
    }

试一试: 包裹 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);
        }
    }

}