Chcę wykonywać wiele zadań na jednym ciągu. trzeba uzyskać ciąg i wyodrębnić różne sub-ciągi przy użyciu separatora ("/"
), a następnie odwrócić listy sub-strings i wreszcie połączyć je za pomocą innego ogranicznika ("."
) taką, że /tmp/test/hello/world/
zamieni się: world.hello.test.tmp
Strumienie Java 8 do manipulowania ciągami znaków
Korzystanie Java 7 kod jest w następujący sposób:
String str ="/tmp/test/";
List<String> elephantList = new ArrayList<String>(Arrays.asList(str.split("/")));
StringBuilder sb = new StringBuilder();
for (int i=elephantList.size()-1; i>-1; i--) {
String a = elephantList.get(i);
if (a.equals(""))
{
elephantList.remove(i);
}
else
{
sb.append(a);
sb.append('.');
}
}
sb.setLength(sb.length() - 1);
System.out.println("result" + elephantList + " " + sb.toString());
zastanawiałem się, jak mogę zrobić to samo przy użyciu języka Java 8 strumieni, a funkcja przyjmuje na smyczki dołączyć
zastanawiasz się, czy miałeś na myśli zmniejszenie, kiedy napisałeś "mniej czytelny". 'reduce ((s1, s2) -> String.join (".", s2, s1))" wydaje mi się tak samo czytelny jak 'collect', a następnie' reverse', a następnie 'join' :-) – Roland
Używanie' Path' jest niezależne od systemu operacyjnego, jeśli zadaniem jest naprawdę zamiana znaków separatora domyślnego 'FileSystem', a nie' '/ '' konkretnie, o co pytano w pytaniu .Jeśli mówimy, np. o częściach URI lub zapisach w pliku ZIP, może to nie być prawidłowe rozwiązanie (a właściwie * dodanie * zależność od OS) – Holger
@Holger, masz rację, dlatego zabezpieczyłem się i powiedziałem, że "zwykle" lepiej jest używać 'Path' .Nie znam kontekstu pytania, więc czułem, że byłoby dobrze pokaż oba podejścia: – Misha