1. Обзор
В этом уроке мы проиллюстрируем наиболее распространенные и полезные способы работы со списками с помощью библиотеки Guava .
Давайте начнем с простого — и взглянем на создание нового ArrayList
с использованием синтаксиса Guava — без new
:
List<String> names = Lists.newArrayList("John", "Adam", "Jane");
2. Перевернуть список
Во-первых, давайте перевернем список
, используя Lists.reverse()
, как в следующем примере:
@Test
public void whenReverseList_thenReversed() {
List<String> names = Lists.newArrayList("John", "Adam", "Jane");
List<String> reversed = Lists.reverse(names);
assertThat(reversed, contains("Jane", "Adam", "John"));
}
3. Создайте список
символов
из строки
Теперь давайте посмотрим, как разбить строку на список символов
.
В следующем примере мы используем API Lists.CharactersOf()
для создания списка
символов
из строки
«John»
:
``
@Test
public void whenCreateCharacterListFromString_thenCreated() {
List<Character> chars = Lists.charactersOf("John");
assertEquals(4, chars.size());
assertThat(chars, contains('J', 'o', 'h', 'n'));
}
4. Разделите список
Далее — давайте посмотрим, как разделить список
.
В следующем примере мы используем Lists.partition()
для получения последовательных подсписков, каждый из которых имеет размер два:
@Test
public void whenPartitionList_thenPartitioned(){
List<String> names = Lists.newArrayList("John","Jane","Adam","Tom","Viki","Tyler");
List<List<String>> result = Lists.partition(names, 2);
assertEquals(3, result.size());
assertThat(result.get(0), contains("John", "Jane"));
assertThat(result.get(1), contains("Adam", "Tom"));
assertThat(result.get(2), contains("Viki", "Tyler"));
}
5. Удалить дубликаты из списка
Теперь давайте воспользуемся простым трюком, чтобы удалить дубликаты из списка
.
В следующем примере мы копируем элементы в набор
, а затем снова создаем список
из оставшихся элементов:
@Test
public void whenRemoveDuplicatesFromList_thenRemoved() {
List<Character> chars = Lists.newArrayList('h','e','l','l','o');
assertEquals(5, chars.size());
List<Character> result = ImmutableSet.copyOf(chars).asList();
assertThat(result, contains('h', 'e', 'l', 'o'));
}
6. Удалить нулевые значения из списка
Далее — давайте посмотрим, как удалить нулевые
значения из списка
.
В следующем примере мы удаляем все нулевые
значения, используя очень полезный API Iterables.removeIf()
и предикат, предоставляемый самой библиотекой:
@Test
public void whenRemoveNullFromList_thenRemoved() {
List<String> names = Lists.newArrayList("John", null, "Adam", null, "Jane");
Iterables.removeIf(names, Predicates.isNull());
assertEquals(3, names.size());
assertThat(names, contains("John", "Adam", "Jane"));
}
7. Преобразование списка
в неизменяемый список
Наконец, давайте посмотрим, как создать неизменяемую копию списка
— ImmutableList
— с помощью API ImmutableList.copyOf()
:
@Test
public void whenCreateImmutableList_thenCreated() {
List<String> names = Lists.newArrayList("John", "Adam", "Jane");
names.add("Tom");
assertEquals(4, names.size());
ImmutableList<String> immutable = ImmutableList.copyOf(names);
assertThat(immutable, contains("John", "Adam", "Jane", "Tom"));
}
8. Заключение
И вот мы — краткий учебник, в котором рассказывается о большинстве полезных вещей, которые вы можете делать со списками, используя Guava.
Чтобы углубиться в списки, ознакомьтесь с руководством по предикатам и функциям для списков, а также с подробным руководством по объединению и разделению списков в Guava.
Реализацию всех этих примеров и фрагментов кода можно найти в моем проекте Guava на github — это проект на основе Eclipse, поэтому его легко импортировать и запускать как есть.