2017-02-03 4 views
0

Я пишу программу, которая читает файл .txt за строкой, и я хочу создать для каждого уникального значения одного столбца, ArrayList.Как создать ArrayList для каждого уникального значения столбца .txt-файла в Java?

Что .txt файл выглядит следующим образом:

NAME   AGE   COUNTRY   PHONE NUMBER 
Peter   28   USA    00112233 
John   25   England   11223344 
Justin  22   Australia  22334455 
Daisey  24   Canada   33445566 
Harry   27   England   44556677 
Laura   25   England   55667788 
Gary   28   USA    66778899 

Например, я хочу создать для каждой национальности в ArrayList, с соответствующими названиями элементов.

Итак, это:

ArrayList USA:  Peter, Gary 
ArrayList England: John, Harry, Laura 
ArrayList Australia: Justin 
ArrayList Canada: Daisey 

Я не хочу, чтобы создать ArrayLists себя, перед запуском программы. Потому что реальная колонка, о которой я говорю, имеет множество разных значений, поэтому необходимо сделать много ArrayList. Кто-нибудь знает, как я могу позволить программе создать Arraylist для каждого уникального гражданства и добавить соответствующие имена к этому ArrayList?

+3

'Карта >' что-то вроде этого? – SomeJavaGuy

+1

Вы также можете найти [это] (http://stackoverflow.com/questions/30755949/java-8-lambdas-group-list-into-map) интересным. – yeputons

ответ

1

Ну, это проще работать с объектами домена, как:

class User { 
    String name; 
    String country; 
    int age; 
    String phone; 
    // getters and setters omitted 
} 

Где-то в вашем коде будет метод, как:

List<User> readfromFile(String fileName) { 
    // create User for each read line 
} 

И затем использовать поток Апи к группе необходимой колонки, как :

Map<String, List<User>> usersByCountry = users.stream().collect(Collectors.groupingBy(User::getCountry)); 

Если вы хотите только имена пользователей, сгруппированных по стране:

Map<String, List<String>> userNamesByCountry = users.stream().collect(Collectors.groupingBy(User::getCountry, LinkedHashMap::new, Collectors.mapping(User::getName, Collectors.toList()))); 
Смежные вопросы