@dc65k

Как правильно работать с ArrayList?

Всем привет. Изучаю Java, решая задачи на Codewars.
Сначала решаю интересующую меня задачу на JavaScript, затем на Java, тем самым изучая методы в Java.
Например:
function findChildren(dancingBrigade) {
    return dancingBrigade
        .toLowerCase()
        .split('')
        .sort()
        .map((currentValue, index, array) => {
            const previousValue = array[index - 1];

            if (index === 0 || currentValue !== previousValue) {
                return currentValue.toUpperCase();
            }

            return currentValue;
        })
        .join('');
}

const s = 'beeeEBb'; // BbbEeee
const s2 = 'uwwWUueEe'; // EeeUuuWww

console.log(findChildren(s)); // beeeEBb
// console.log(findChildren(s2)); // EeeUuuWww


Java
package main.java.kyu6;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class WhereIsMyParent {

    static int index = 0;

    static String findChildren(final String text) {

        ArrayList<Character> arrayList = new ArrayList<>();

        for (int i = 0; i < text.length(); i++) {
            Character currentValue = Character.toLowerCase(text.charAt(i));
//            System.out.println(text.charAt(i));

            arrayList.add(currentValue);
        }

        System.out.println(arrayList);

        System.out.println(Collections.sort(arrayList));

        List<Character> result = arrayList.stream().map((currentValue) -> {
            Character previousValue = arrayList.get(index - 1);

            index++;

            return currentValue;

        }).collect(Collectors.toList());

//        System.out.println("result " + result);

        return "";
    }

    public static void main(String[] args) {
        String s = "beeeEBb"; // "EeeeBbb"
        String s2 = "uwwWUueEe"; // "WwwUuuEee"

        System.out.println(findChildren(s)); // "EeeeBbb"
//        System.out.println(findChildren(s2)); // "WwwUuuEee"
    }
}

Ещё раз уточню, что вопрос не в том как решить задачу, а в конкретных ниже описанных моментах.
Изначально я создал коллекцию ArrayList в цикле заполнил её. В данном случае я разбираю именно работу с ArrayList.
Далее, используя вспомогательный класс Collections я хочу отсортировать в алфавитном порядке коллекцию:
System.out.println(Collections.sort(arrayList));
Первый вопрос, почему не выходит отсортировать?
Также уточню, что здесь именно желание попрактиковаться с функциональным программированием в Java.
Далее, используя Stream API, используя метод map, я хочу пройти пройти по коллекции. Второй вопрос, верно ли я понял, что в параметрах только currentValue? Соответственно, чтобы получить индекс мне необходимо выше отдельно объявлять переменную?
Далее в условии я хочу проверить:
If (currentValue !== previousValue) {}
Соответственно мне необходимо получить previousValue:
Character previousValue = arrayList.get(index - 1);

Третий вопрос, насколько я понимаю, если элемента по указанному индексу не существует, вернётся не null, а ошибка. Как правильно получить previousValue?

Прошу строго не судить, а, по возможности, подсказать насчёт вышеуказанных вопросов.
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
0. На дворе 21й год. Не нужно использовать старые версии java и объявлять тип для локальных переменных.
var arrayList = new ArrayList<Character>>();
1. Чтобы сделать из строки массив используйте функцию .split: var array = someString.toLowerCase().split("")
2. System.out.println(Collections.sort(arrayList)); .sort - это void. Он ничего не возвращает. Тут у вас будет ошибка компиляции.
3.
{
            Character previousValue = arrayList.get(index - 1);

            index++;

            return currentValue;

        }
так вообще никто не делает. Главная проблема - использование глобальных переменных внутри лямбды. Считайте, что previousValue вам никак не получить (не в StreamAPI). Придумайте другое решение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы