Вчера, просматривая Твиттер, я наткнулся на это:…
public String reverse(String in){ String[] split = in.split(""); Collections.reverse(Arrays.asList(split)); return String.join("", split); }
Это работает, но это больше, чем одна строка. Чтобы создать один лайнер, я начал изучать Java Stream API и его методы. Хотя я знал, что ни о каких промежуточных операциях для такой задачи не может быть и речи, я начал искать доступные сборщики. Мой поиск вернулся пустым, и мне пришлось прибегнуть к внедрению пользовательского сборщика:
public String reverse(String in){ return Arrays.stream(in.split("")).collect(new Collector, String>() { final List helper = new LinkedList<>(); @Override public Supplier > supplier() { return () -> helper; } @Override public BiConsumer
, String> accumulator() { return (strings, s) -> strings.add(0, s); } @Override public BinaryOperator
> combiner() { return null; } @Override public Function
, String> finisher() { return strings -> String.join("", strings); } @Override public Set
characteristics() { return new HashSet<>(); } }); }
Вот оно! Вот оно! Вот оно! Вот оно! Вот оно! Вот оно! Вот оно! Вот оно! Вот оно! Вот оно!
Оригинал: “https://dev.to/codingmanta/reverse-string-in-one-line-5e4b”