У меня есть строка, которую я конвертирую в ArrayList с целью подсчета количества конкретных значений в списке.Строка для отображения числа вхождений уникальных значений в Java ArrayList
Моя строка может выглядеть следующим образом:
String myString = "Living Room, Bedroom, Bedroom, Bedroom, Bathroom, Bathroom, Family Room."
Я в настоящее время найти количество вхождений уникальных значений в этом случае:
Map<String, Long> count = Stream.of(myString.split(",")).collect(Collectors.groupingBy(w -> w, Collectors.counting()));
Что лучший способ пойти об этом так что я могу напечатать что-то в строках «Мой дом включает в себя 1 гостиную, 3 спальни, 2 ванные комнаты и 1 семейный номер».
На данный момент мое решение заключается в следующем. Я еще не принял ответ, потому что я думаю, как я последовал через немного неуклюжим:
String newDescription = "My Home includes ";
public String getDescription(){
String myDescription = home.getDescription();
Map<String, Long> count = Stream.of(myDescription.split(",")).collect(Collectors.groupingBy(w -> w, Collectors.counting()));
for (Map.Entry<String, Long> entry : count.entrySet()){
newDescription = newDescription + entry.getValue() + " " + entry.getKey() + "(s), ";
}
return newDescription;
}
Я ранее собирался об этом таким образом, но другой SO пользователь предложил изменения:
public ArrayList convertDescription(){
//getDescription is inherited from another class to provide a string like the myString example above
String myDescription = home.getDescription();
ArrayList<String>Map<String, listDescriptionLong> =count new= ArrayList<String>(ArraysStream.asListof(myDescription.split(",")));
int livingRoomOccurrences = Collections.frequencycollect(listDescription, "Living Room");
int bedroomOccurrences = CollectionsCollectors.frequencygroupingBy(listDescription, "Bedroom");
int bathroomOccurrencesw =-> Collections.frequency(listDescriptionw, "Bathroom");
int familyRoomOccurrences = CollectionsCollectors.frequencycounting(listDescription, "Family Room");
int kitchenOccurrences = Collections.frequency(listDescription, "Kitchen");
int walkInClosetOccurrences = Collections.frequency(listDescription, "Walk-in Closet");
//not sure what I should return to make it easy to override getDescription with the proper string formatting
return listDescription;
}
public String getDescription(){
return home.getDescription();
}
Хорошо, это выглядит более элегантно. Я пытаюсь получить больше информации о синтаксисе w -> w ... Я новичок в java – user25976
@ user25976, это функция, которая возвращает все, что вам дано. Это необходимо, поскольку первая функция/аргумент 'groupingBy' должна предоставить ключ, но вы хотите, чтобы ключ был неизменным, поэтому функция ничего не делает. например скажем, вы сделали 'w -> w.toLowerCase()' он будет считать слова в нижнем регистре, чтобы случай был проигнорирован. Это означает, что '' и '' и '" И "' и '" AND "' будут считаться как '' и '' –
@ user25976, вы могли бы сделать w ~ wwength()' Это сделало бы ключ, длина слова вместо самих слов. Или вы можете так «w -> w.charAt (0)», и вместо этого ключ будет первой буквой каждого слова. –