我想要根据特定模式提取数组列表的子列表,如下所述。请指教。
ArrayList<String> Filelist=new ArrayList<String>();
Filelist.add("abc.123");
Filelist.add("abc.456");
Filelist.add("def.123");
Filelist.add("def.456");
这里我需要以第一个索引开头的任何内容,比如说abc
要存储在单独的子列表中,而任何以def
开头的内容都需要存储在单独的子列表中。数组列表将有多个这样的条目,因此必须相应地创建单独的子列表。
答案 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)
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);
}
}
}