Таким образом, существует список массивов:
ArrayList<Character> charOutput = new ArrayList<Character>();
Он ест символы, поэтому он заканчивает так:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, *, *, *, *, *, *, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
Но это довольно гротескно в нашем конкретном приложении. мы хотим его подрезать, чтобы, наконец, он выглядел так:
[0,1,*,3,4]
Итак, как это сделать?
сканировать линейно через массив, отслеживая current item
. Если next item
соответствует current item
игнорировать его и двигаться вперед. Если это не соответствует, то сделайте new item
в качестве current item
и выведите current item
.
И вот код
public static void main(String []args)
{
ArrayList<Character> charOutput = new ArrayList<Character>();
ArrayList<Character> charOutputTrimmed = new ArrayList<Character>();
charOutput.add('0');charOutput.add('0');charOutput.add('0');
charOutput.add('1');charOutput.add('1');charOutput.add('1');
charOutput.add('*');charOutput.add('*');charOutput.add('2');
charOutput.add('2');charOutput.add('0');
Character currentChar = charOutput.get(0);
charOutputTrimmed.add(currentChar);
for(int i=1;i<charOutput.size();i++)
{
if(currentChar != charOutput.get(i))
{
currentChar = charOutput.get(i);
charOutputTrimmed.add(currentChar);
}
}
for(int i=0;i<charOutputTrimmed.size();i++)
{
System.out.print(charOutputTrimmed.get(i) + "\t");
}
}
Постройте Set
из ArrayList
затем преобразуйте его обратно в ArrayList
.
Если вы не хотите использовать коллекции, вы можете просто перебирать данный ArrayList
и для каждого числа, которое вы видите, добавить его в другой ArrayList
если он не был добавлен ранее.
Изменить: (Не полное решение с кодом)
Если вы хотите удалить только смежные элементы, итерации по ArrayList
, добавьте текущий элемент. Теперь, пока следующий элемент равен текущему элементу, продолжайте. Когда вы увидите другой элемент, отличный от текущего, добавьте его.
Используйте Set, чтобы получить уникальный список. Хорошая вещь для этого: он работает для любых пользовательских объектов.
//Converting ArrayList to HashSet to remove duplicates
LinkedHashSet<Character> listToSet = new LinkedHashSet<Character>(duplicateList);
//Creating Arraylist without duplicate values
List<Character> listWithoutDuplicates = new ArrayList<Character>(listToSet);
обходите вокруг и просто держите неразрешающие символы
ArrayList<Character> charInput = new ArrayList<Character>();
ArrayList<Character> charOutput = new ArrayList<Character>();
char lastch = 255;
for (char ch : charInput) {
if (ch != lastch) {
charOutput.add(ch);
}
lastch = ch;
}
Передайте объект arraylist в LinkedHashSet, вы получите требуемый результат.
Set<Character> s = new LinkedHashSet<Character>(charOutput);
Спасибо и приветствую.