2016-07-15 17 views
0

Ich möchte extrahieren Unterlisten einer Array-Liste basierend auf bestimmten Muster wie unten erwähnt. Bitte beraten.Java: Extrahieren von Unterliste der Arraylist basierend auf Muster

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

Hier brauche ich, was mit dem ersten Index beginnt, sagen abc in separater Unterliste gespeichert werden und was auch immer beginnt mit def Bedarf in separater Unterliste gespeichert werden. Die Array-Liste enthält mehrere Einträge wie diese, so dass separate Unterlisten entsprechend erstellt werden müssen.

+0

Also, was hast du bisher versucht? –

Antwort

2

oder der klassische Java 7 Weg.

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

Das funktioniert :) Vielen Dank – Karthik

+0

nice !! ich liebe es – Cherif

+0

Dies kann ein wenig optimiert werden: 'String prefix = str.split (" \\. ") [0]; Liste files = map.get (Präfix); if (files == null) map.put (Präfix, Dateien = new ArrayList <>()); files.add (str); ' – shmosel

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

Was ist: s -> s.split? !! – Cherif

+0

das ist 'java 8' :) – Apostolos

+0

Ich bin auf Java 7. :( – Karthik

1

Probieren Sie es aus: Paket 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); 
     } 
    } 

} 
Verwandte Themen