Вам необходимо отслеживать текущий байт и не добавлять следующий байт, если он совпадает с предыдущим:
String input = "Geeks";
byte[] strAsByteArray = input.getBytes();
List<Byte> list = new ArrayList<>();
//byte[] result = new byte[strAsByteArray.length];
byte prev = 0;
for (int i=0; i < strAsByteArray.length; i++) {
byte curr = strAsByteArray[strAsByteArray.length-i-1];
if (curr != prev) {
prev = curr;
list.add(curr);
}
}
byte[] result = new byte[list.size()];
for (int i=0; i < list.size(); ++i) {
result[i] = list.get(i);
}
System.out.println(new String(result));
Это печатает:
skeG
Обратите внимание, что я использую список для первоначального хранения байтов, потому что мы на самом деле не знаем, каким будет окончательный размер фиксированного байтового массива, пока мы не проанализируем всю строку в обратном порядке.Я хотел найти изящный способ преобразования List<Byte>
в массив примитивных байтов с использованием потоков.Из-за этого я просто использовал расширенный цикл for.