Объединение элементов коллекции по условию
есть список:
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);