Объединение элементов коллекции по условию

есть список:

List<String> list = Arrays.asList(
                "XXXXXXXXXXXXXXXXXXXXXXXX",
                "YYYYYYYYY",
                "ZZZZZZZZZ",
                "RRRRRRRRR",
                "EEEEEEEEEEEEEEEEEEEEEEEE"
        ); 

Как сделать так что бы элементы меньше 25 символов могли объединиться со следующим элементом, если сумма символов этих двух эл-тов будет меньше 25

list = Arrays.asList(
                "XXXXXXXXXXXXXXXXXXXXXXXX",
                "YYYYYYYYYZZZZZZZZZ",
                "RRRRRRRRR",
                "EEEEEEEEEEEEEEEEEEEEEEEE"
        );

Заранее спасибо за ответ


Ответы (2 шт):

Автор решения: ЮрийСПб

Например как-то так:

List<String> resultList = new ArrayList<>();

List<String> list = Arrays.asList(
                "XXXXXXXXXXXXXXXXXXXXXXXX",
                "YYYYYYYYY",
                "ZZZZZZZZZ",
                "RRRRRRRRR",
                "EEEEEEEEEEEEEEEEEEEEEEEE"
        ); 

String previousElement = "";
for (String currentElement: list) {

    String resultElement = currentElement;
    if ((currentElement.length+previousElement.lenth) < 25) {
    
        resultElement = previousElement + currentElement;
    
    }
    resultList.add(resultElement);
    previousElement = resultElement;

}
→ Ссылка
Автор решения: Олексій Моренець
    List<String> resultList = new ArrayList<>();
    final int maxLength = 25;

    List<String> list = Arrays.asList(
            "XXXXXXXXXXXXXXXXXXXXXXXX",
            "YYYYYYYYY",
            "ZZZZZZZZZ",
            "RRRRRRRRR",
            "",
            "1",
            "22",
            "333",
            "4444",
            "55555",
            "EEEEEEEEEEEEEEEEEEEEEEEE",
            "1"
    );

    int currentIndex = 0;
    while (currentIndex < list.size()) {
        String currentElement = list.get(currentIndex);
        int currentLength = currentElement.length();

        while (currentLength <= maxLength && ++currentIndex < list.size()) {
            String nextElement = list.get(currentIndex);
            currentLength += nextElement.length();
            if (currentLength <= maxLength) {
                currentElement += nextElement;
            } else {
                break;
            }
        }
        resultList.add(currentElement);
    }

    System.out.println(resultList);
→ Ссылка