Konwersja ze String lub char[] na List<Character>

0

Właśnie natrafiłem na drobny problem przy konwersji z prostej tablicy lub Stringa na niemodyfikowalną listę znaków. Nie pamiętam chwilowo czy istnieje jakiś elegancki sposób na konwersję bez używania jawnej pętli i kopiowania znak po znaku.

Rozwiązałem sobie dość wygodnie problem z listą znaków będącą argumentem metody przez użycie parametru Character... arg:

private SimpleIni(final Character... separators)
{
	this.separators = Collections.unmodifiableList(Arrays.asList(separators));
}

private final List<Character> separators;

Bo korzysta ona z autoboxingu już na starcie.

Ale co do char[] i Stringa (toCharArray()) na wejściu mam jakieś zaciemnienie.
Jakieś propozycje?

1

Ja bym stworzył klasę MyUnmodifiableCharactersList, która implementuje List/dziedziczy po AbstractList i przechowuje Stringa :p I odczytuje w miarę potrzeby jego kolejne znaki...

1

Wystarczy zaimplementować dwie metody:

private SimpleIni(final String separators) {
    this.separators = new AbstractList<Character>() {
        public int size() {
            return separators.length();
        }
        public Character get(int index) {
            return separators.charAt(index);
        }
    };
}
0

Zapomniałem jeszcze dodać, że ten przykładowy SimpleIni, to enum budowany przez klienta i sterujący o wiele większymi rzeczami, więc konwersja powinna być prosta jak budowa cepa. Gdzieś mi dzwoniło, że powinna być jakaś kombinacja narzędzi z biblioteki standardowej, żeby tak oczywistą konwersję przeprowadzić z palca. Ale może jednak tylko mi się wydaje...
Wystarczyłaby mi sama konwersja z char[] na Character[], ale jakoś nie mogę sobie przypomnieć jak to najprościej zrobić.

0

W samej bibliotece standardowej chyba nie ma i bez pętli się nie obędzie, jest za to mnóstwo takich konwerterów w guava i apache commons (pewnie właśnie dlatego, że standardowa tego nie oferuje). A jeśli jest, to będzie to nie prostsze niż to powyżej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1