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);
}
}
}
我想根据下面提到的特定模式提取数组列表的子列表。请指教
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);
}
}
}