JavaRush/Java блог/Архив info.javarush/В Java 8 можно объединять строки
theGrass
24 уровень

В Java 8 можно объединять строки

Статья из группы Архив info.javarush
участников
Я уверен, что вы были в ситуации, в которой хотели объединять несколько строк. Если вы писали не на Java, то вероятно вы использовали функцию join() предоставленную вам самим языком программирования. Если вы писали на Java, то не могли этого сделать по простой причине — этого метода не было. Стандартная библиотека классов в Java предоставляла вам инструменты для создания приложений с графическим интерфейсом, для доступа к базам данных, для отправки данных по сети, для XML преобразований или для вызова методов сторонних библиотек. Простой метод для соединения коллекции строк не был включен. Для этого вам необходима была одна из множества сторонних библиотек. В Java 8 можно объединять строки - 1К счастью, этому пришел конец! В Java 8 мы, наконец, можем объединять строки! В Java 8 добавлен новый класс, называемый StringJoiner . Как следует из названия, мы можем использовать этот класс, чтобы объединять строки:
StringJoiner joiner = new StringJoiner(",");
joiner.add("foo");
joiner.add("bar");
joiner.add("baz");
String joined = joiner.toString(); // "foo,bar,baz"

// add() calls can be chained
joined = new StringJoiner("-")
.add("foo")
.add("bar")
.add("baz")
.toString(); // "foo-bar-baz"
String использует два новых статических метода join() StringJoiner:
// join(CharSequence delimiter, CharSequence... elements)
String joined = String.join("/", "2014", "10", "28" ); // "2014/10/28"

// join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
List<String> list = Arrays.asList("foo", "bar", "baz");
joined = String.join(";", list); // «foo;bar;baz"
Также, для объединения строк существует специальный Collector в новом API с применением потоков:
List<Person> list = Arrays.asList(
 new Person("John", "Smith"),
 new Person("Anna", "Martinez"),
 new Person("Paul", "Watson ")
);

String joinedFirstNames = list.stream()
 .map(Person::getFirstName)
 .collect(Collectors.joining(", ")); // "John, Anna, Paul»
Таким образом, нам действительно больше не нужны сторонние библиотеки для объединения строк! Оригинал статьи
Комментарии (7)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Deniska Ученик чародея в тредевятом царстве
29 ноября 2020, 10:32
Сомнительное удовольствие, но довольно интересное. Похоже на обратную работа метода split(); объединение строк по разделителю.
super4prikolist1
Уровень 0
29 ноября 2019, 01:44
"lol"+"kek"???????? не объединение строк?
Алексей Клоков
Уровень 35
8 июня 2020, 23:09
Возможно при использовании StringJoiner при соединении не создается новая строка. Если вы имеете ввиду конкатенацию String, то там при каждом соединении новая строка создается. В больших проектах это минус производительности
maks1m
Уровень 25
6 июня 2014, 02:20
А чем StringJoiner лучше старого StringBuilder?
Kverde
Уровень 31
1 июля 2014, 10:38
У них разное назначение, StringJoiner для конкатенации строк с определенным разделителем, а StringBuilder просто изменяемая строка.
BariO
Уровень 19
20 февраля 2020, 14:24
почему я не могу найти метод join() в доках java? всё разобрался. этот метод появился в java 8, до этого его не было, а у меня была как раз открыта 7я версия документации. фух
Павел студент на стероидах в Java Syntax Pro beta
1 декабря 2020, 17:14
А ты попробуй объединить СтрингБилдером массив из тыщи строк да ещё с каким-нибдуь хитровымудренным разделителем. А тут раз и готово!