/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList(
"Primero1/Segundo1/Tercero2",
"Primero1/Segundo2/Tercero2",
"Primero3/Segundo1/Tercero1",
"Primero1/Segundo2/Tercero3",
"Primero3/Segundo3/Tercero1",
"Primero1/Segundo3/Tercero2",
"Primero3/Segundo2/Tercero3",
"Primero1/Segundo3/Tercero3",
"Primero2/Segundo1/Tercero1",
"Primero2/Segundo1/Tercero2",
"Primero1/Segundo1/Tercero3",
"Primero2/Segundo2/Tercero1",
"Primero1/Segundo3/Tercero1",
"Primero2/Segundo2/Tercero2",
"Primero2/Segundo2/Tercero3",
"Primero2/Segundo3/Tercero1",
"Primero2/Segundo3/Tercero2",
"Primero1/Segundo1/Tercero1",
"Primero2/Segundo1/Tercero3",
"Primero2/Segundo3/Tercero3",
"Primero3/Segundo1/Tercero2",
"Primero3/Segundo1/Tercero3",
"Primero3/Segundo2/Tercero1",
"Primero3/Segundo2/Tercero2",
"Primero1/Segundo2/Tercero1",
"Primero3/Segundo3/Tercero2",
"Primero3/Segundo3/Tercero3"
);
Map<String, Map<String, List<String>>> result = list.stream()
.map( element -> element.split( "/" ) )
.collect( Collectors.groupingBy( strings -> strings[0], () -> new TreeMap<>(),
Collectors.groupingBy( strings -> strings[1], () -> new TreeMap<>(),
Collectors.mapping( strings -> strings[2],
Collectors.collectingAndThen( Collectors.toList(),
terceros -> terceros.stream().sorted().collect( Collectors.toList())
)))));
result.entrySet().forEach( primero -> {
System.out.println( primero.getKey() );
primero.getValue().forEach( (segundo, terceros) -> {
System.out.println( " " + segundo );
terceros.forEach( tercero -> {
System.out.println( " " + tercero );
});
});
});
}
}