2016-07-15 30 views
0

我想基於特定模式提取數組列表的子列表,如下所述。請指教。Java:基於模式提取數組列表子列表

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

那麼,你到目前爲止嘗試過什麼? –

回答

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); 
    } 
+0

這工作:)非常感謝 – Karthik

+0

很好!我喜歡它 – Cherif

+0

這可以優化一下:'String prefix = str.split(「\\。」)[0];列表 files = map.get(prefix); if(files == null)map.put(prefix,files = new ArrayList <>()); files.add(STR);' – shmosel

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

什麼是:s - > s.split?!! – Cherif

+0

這是'java 8' :) – Apostolos

+0

我在Java 7上。:( – Karthik

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); 
     } 
    } 

}