Использование потокового API для установки строк в нижнем регистре, но с заглавной буквы - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть List<String>, и, используя только потоковый API, я установил все строки в нижний регистр, сортируя их от самой маленькой строки до самой большой и печатая их.Проблема, с которой я столкнулся, заключается в том, чтобы использовать первую букву строки.

Это то, что я делаю через .stream().map()?

public class Main {

    public static void main(String[] args) {

        List<String> list = Arrays.asList("SOmE", "StriNgs", "fRom", "mE", "To", "yOU");
        list.stream()
            .map(n -> n.toLowerCase())
            .sorted((a, b) -> a.length() - b.length())
            .forEach(n -> System.out.println(n));;

    }

}

Вывод:

me
to
you
some
from
strings

Желаемый вывод:

Me
To
You
Some
From
Strings

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018
list.stream()
    .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase())
    .sorted(Comparator.comparingInt(String::length))
    .forEach(System.out::println);

Для удобства чтения строку, выполняющую использование заглавных букв, следует переместить в метод,

public class StringUtils {
    public static String capitalise(String s) {
        return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
    }
}

, чтобы вы могли обратиться к нему с помощью ссылки на красноречивый метод:

list.stream()
    .map(StringUtils::capitalise)
    .sorted(Comparator.comparingInt(String::length))
    .forEach(System.out::println);
0 голосов
/ 12 декабря 2018

Для этого вы можете использовать WordUtils::capitalizeFully из Apache Commons Lang .

 list.stream()
     .sorted(Comparator.comparingInt(String::length))
     .map(WordUtils::capitalizeFully)
     .forEach(System.out::println);
0 голосов
/ 12 декабря 2018

Что-то вроде этого должно быть достаточно:

 list.stream()
     .map(n -> n.toLowerCase())
     .sorted(Comparator.comparingInt(String::length))
     .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
     .forEachOrdered(n -> System.out.println(n));
  1. обратите внимание, что я изменил компаратор, что по сути является идиоматическим подходом к этому.
  2. Я добавилmap операция после сортировки в верхнем регистре первой буквы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...