1. Обзор
В этом уроке мы рассмотрим преобразование разделенной запятыми Строки в Список строк. Кроме того, мы преобразуем разделенную запятыми Строку целых чисел в Список Целых чисел .
2. Зависимости
Некоторые из методов, которые мы будем использовать для наших преобразований, требуют библиотек Apache Commons Lang3 и Guava . Итак, давайте добавим их в ваш pom.xml файл:
org.apache.commons commons-lang3 3.11 com.google.guava guava 27.0.1-jre
3. Определение Нашего Примера
Прежде чем мы начнем, давайте определим две входные строки, которые мы будем использовать в наших примерах. Первая строка, страны, содержит несколько строк, разделенных запятой, а вторая строка, ранги, включает числа, разделенные запятой:
String countries = "Russia,Germany,England,France,Italy"; String ranks = "1,2,3,4,5,6,7";
И на протяжении всего этого урока мы преобразуем приведенные выше строки в списки строк и целых чисел, которые мы будем хранить в:
ListconvertedCountriesList; List convertedRankList;
Наконец, после того, как мы выполним наши преобразования, ожидаемые результаты будут:
ListexpectedCountriesList = Arrays.asList("Russia", "Germany", "England", "France", "Italy"); List expectedRanksList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
4. Ядро Java
В нашем первом решении мы преобразуем строку в список строк и целых чисел, используя ядро Java.
Во-первых, мы разделим нашу строку на массив строк , используя split, a String метод утилиты класса. Затем мы будем использовать Arrays.asList в нашем новом массиве строк, чтобы преобразовать его в список строк:
ListconvertedCountriesList = Arrays.asList(countries.split(",", -1));
Теперь давайте превратим нашу строку чисел в список целых чисел.
Мы будем использовать метод split для преобразования нашей строки чисел в массив строк. Затем мы преобразуем каждую строку в нашем новом массиве в целое число и добавим ее в наш список :
String[] convertedRankArray = ranks.split(","); ListconvertedRankList = new ArrayList (); for (String number : convertedRankArray) { convertedRankList.add(Integer.parseInt(number.trim())); }
В обоих этих случаях мы используем метод утилиты split из класса String для разделения строки, разделенной запятыми, на массив строк.
Обратите внимание , что метод перегруженного разделения , используемый для преобразования нашей строки страны , содержит второй параметр limit , для которого мы указали значение -1. Это указывает, что шаблон разделителя должен применяться как можно больше раз.
То расщеплять метод, который мы использовали для разделения нашей строки целых чисел ( ранги ) использует ноль в качестве предел , и поэтому он игнорирует пустые строки, в то время как расщеплять используется на страны строка остается пустой строкой в возвращаемом массиве.
5. Потоки Java
Теперь мы реализуем те же преобразования с помощью API Java Stream .
Во-первых, мы преобразуем нашу строку страны в массив строк, используя метод split в классе String . Затем мы будем использовать класс Stream для преобразования нашего массива в список строк:
ListconvertedCountriesList = Stream.of(countries.split(",", -1)) .collect(Collectors.toList());
Давайте посмотрим, как преобразовать нашу строку чисел в список целых чисел с помощью потока .
Опять же, сначала мы преобразуем строку чисел в массив строк с помощью метода split и преобразуем полученный массив в Stream of String с помощью метода of() в классе Stream .
Затем мы обрезаем начальные и конечные пробелы из каждой Строки в потоке с помощью map(String: : |/trim) .
Затем мы применим map(Integer::parseInt) к нашему потоку, чтобы преобразовать каждую строку в нашем потоке в Целое число .
И, наконец, мы вызовем collect(Коллекторы.ToList()) в потоке для преобразования его в целочисленный список:
ListconvertedRankList = Stream.of(ranks.split(",")) .map(String::trim) .map(Integer::parseInt) .collect(Collectors.toList());
6. Apache Commons Lang
В этом решении мы будем использовать библиотеку Apache Commons Lang3 для выполнения наших преобразований. Apache Commons Lang3 предоставляет несколько вспомогательных функций для управления основными классами Java.
Сначала мы разделим нашу строку на массив строк с помощью StringUtils.splitPreserveAllTokens . Затем мы преобразуем наш новый строковый массив в список, используя метод Arrays.asList :
ListconvertedCountriesList = Arrays.asList(StringUtils.splitPreserveAllTokens(countries, ","));
Теперь давайте преобразуем нашу строку чисел в список целых чисел.
Мы снова будем использовать метод StringUtils.split для создания массива строк из нашей строки. Затем мы преобразуем каждую строку в нашем новом массиве в целое число с помощью Integer.parseInt и добавим преобразованное целое число в наш список:
String[] convertedRankArray = StringUtils.split(ranks, ","); ListconvertedRankList = new ArrayList (); for (String number : convertedRankArray) { convertedRankList.add(Integer.parseInt(number.trim())); }
В этом примере мы использовали метод splitPreserveAllTokens для разделения нашей строки стран , в то время как мы использовали метод split для разделения нашей строки рангов .
Несмотря на то, что обе эти функции разбивают строку на массив, splitPreserveAllTokens сохраняет все токены, включая пустые строки, созданные соседними разделителями, в то время как метод split игнорирует пустые строки .
Итак, если у нас есть пустые строки, которые мы хотим включить в наш список, то мы должны использовать splitPreserveAllTokens вместо split .
7. Гуава
Наконец, мы будем использовать библиотеку Гуавы для преобразования наших строк в соответствующие списки.
Чтобы преобразовать нашу строку страны , мы сначала вызовем Splitter.on с запятой в качестве параметра, чтобы указать, на какой символ должна быть разделена наша строка.
Затем мы будем использовать метод trimResults в нашем экземпляре Splitter . При этом будут игнорироваться все начальные и конечные пробелы из созданных подстрок.
Наконец, мы будем использовать метод splitToList , чтобы разделить нашу входную строку и преобразовать ее в список:
ListconvertedCountriesList = Splitter.on(",") .trimResults() .splitToList(countries);
Теперь давайте преобразуем строку чисел в список целых чисел .
Мы снова преобразуем строку чисел в список строк , используя тот же процесс, который мы описали выше.
Затем мы будем использовать Списки . transform метод, который принимает наш список строк в качестве первого параметра реализации Функции интерфейса в качестве второго параметра .
Реализация интерфейса Function преобразует каждую строку в нашем списке в целое число:
ListconvertedRankList = Lists.transform(Splitter.on(",") .trimResults() .splitToList(ranks), new Function () { @Override public Integer apply(String input) { return Integer.parseInt(input.trim()); } });
8. Заключение
В этой статье мы преобразовали разделенные запятыми Строки в список строк и список целых чисел. Однако мы можем следовать аналогичным процессам для преобразования String в список любых примитивных типов данных.
Как всегда, код из этой статьи доступен на Github .