JDK 8 представил языковые функции, такие как лямбда-выражения , потоки и даже новый API даты / времени , которые изменят способ написания Java-приложений. Тем не менее, есть также несколько новых API и функций, которые могут быть менее «изменяющими игру», но все же привносят большее удобство и выразительность в язык программирования Java. В этой статье я рассмотрю одну из этих небольших функций и рассмотрю возможность простого объединения нескольких строк в JDK 8.
Возможно, самый простой способ объединить несколько строк в JDK 8 — это два новых статических метода в Java-классе String : join (CharSequence, CharSequence…) и join (CharSequence, Iterable) . В следующих двух листингах кода показано, как легко применить эти два метода String.join .
Использование String.join (CharSequence, CharSequence…)
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
/** * Words associated with the blog at http://marxsoftware.blogspot.com/ in array. */private final static String[] blogWords = {"Inspired", "by", "Actual", "Events"};/** * Demonstrate joining multiple Strings using static String * "join" method that accepts a "delimiter" and a variable * number of Strings (or an array of Strings). */private static void demonstrateStringJoiningArray(){ final String blogTitle = String.join(" ", blogWords); out.println("Blog Title: " + blogTitle); final String postTitle = String.join(" ", "Joining", "Strings", "in", "JDK", "8"); out.println("Post Title: " + postTitle);} |
Использование String.join (CharSequence, Iterable)
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
/** * Pieces of a Media Access Control (MAC) address. */private final static List<String> macPieces;static{ macPieces = new ArrayList<>(); macPieces.add("01"); macPieces.add("23"); macPieces.add("45"); macPieces.add("67"); macPieces.add("89"); macPieces.add("ab");};/** * Demonstrate joining multiple Strings using static String * "join" method that accepts a "delimiter" and an Iterable * on Strings. */private static void demonstrateStringJoiningIterable(){ final String macAddress = String.join(":", macPieces); out.println("MAC Address: " + macAddress);} |
Результат выполнения двух приведенных выше списков кода:
|
1
2
3
|
Blog Title: Inspired by Actual EventsPost Title: Joining Strings in JDK 8MAC Address: 01:23:45:67:89:ab |
Использование двух статических методов String.join — это простой способ объединения строк, но класс StringJoiner, представленный в JDK 8, обеспечивает еще большую мощность и гибкость. Следующий листинг кода демонстрирует создание экземпляра StringJoiner и передачу ему указанного разделителя (десятичная точка), префикса (открывающая скобка) и суффикса (закрывающая скобка).
Simple String Joiner Use
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
/** * Demonstrate joining multiple Strings using StringJoiner * with specified prefix, suffix, and delimiter. */private static void demonstrateBasicStringJoiner(){ // StringJoiner instance with decimal point for delimiter, opening // parenthesis for prefix, and closing parenthesis for suffix. final StringJoiner joiner = new StringJoiner(".", "(", ")"); joiner.add("216"); joiner.add("58"); joiner.add("216"); joiner.add("206"); final String ipAddress = joiner.toString(); out.println("IP Address: " + ipAddress);} |
При выполнении вышеуказанного кода в стандартный вывод выводится следующая строка: «IP-адрес: (216.58.216.206)»
StringJoiner — это особенно привлекательный подход в сценарии, когда добавляется разделительный символ в строку, создаваемую как часть некоторого типа итерации с помощью StringBuilder . В таких случаях часто приходилось удалять дополнительный символ, добавленный в конец этого компоновщика с последней итерации. StringJoiner «достаточно умен», чтобы добавлять разделители только между конкатенируемыми строками, а не после последнего. Последовательные вызовы методов add(CharSequence) очень похожи на API StringBuilder / StringBuffer .
Последний из представленных в JDK 8 подходов для объединения строк, о которых я расскажу в этом посте, — это использование потоковых коллекций с объединяющим коллектором ( операция сокращения ). Это продемонстрировано в следующем листинге кода, и его выходные данные аналогичны подходу String.join используемому для печати MAC-адреса через String.join который принял Iterable качестве второго аргумента.
Строка, соединяющаяся с потоком коллекции
|
01
02
03
04
05
06
07
08
09
10
11
|
/** * Demonstrate joining Strings in a collection via that collection's * Stream and use of the Joining Collector. */private static void demonstrateStringJoiningWithCollectionStream(){ final String macAddress = macPieces.stream().map( piece -> piece.toString()).collect(Collectors.joining(":")); out.println("MAC Address: " + macAddress);} |
Если разработчик хочет предоставить префикс и суффикс для присоединяемой строки без необходимости последовательных вызовов для add методов, необходимых для объединения String с StringJoiner , метод Collectors.joining (CharSequence, CharSequence, CharSequence) идеально подходит. В следующем примере кода показан приведенный выше пример IP-адреса, который использовался для демонстрации StringJoiner , но на этот раз реализован с коллекцией, потоком и соединительным коллектором. Вывод такой же, как и в предыдущем примере, без необходимости указывать add(CharSequence) для каждой String нужно объединить.
Соединение строк с потоком и префиксом и суффиксом коллекции
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
/** * Demonstrate joining Strings in a collection via that collection's * Stream and use of a Joining Collector that with specified prefix * and suffix. */private static void demonstrateStringJoiningWithPrefixSuffixCollectionStream(){ final List<String> stringsToJoin = Arrays.asList("216", "58", "216", "206"); final String ipAddress = stringsToJoin.stream().map( piece -> piece.toString()).collect(Collectors.joining(".", "(", ")")); out.println("IP Address: " + ipAddress);} |
В этом блоге описаны три подхода к соединению строк, доступных в JDK 8:
- Статические методы
String.join - Экземпляр
StringJoiner - Коллекционный поток с присоединяющимся коллектором
| Ссылка: | Присоединяйтесь к Strings в JDK 8 от нашего партнера JCG Дастина Маркса в блоге Inspired by Actual Events . |