¿Cómo comparar cadenas de caracteres usando una secuencia?

Mefisto_Fell:

Me estudiar la corriente, me encontré con una pregunta. Tengo una necesidad de la lista I para ordenar por la longitud de la cadena, todas las cuerdas donde hay una coincidencia de caracteres en mayúsculas, si no hay tal, a continuación, ordenar por orden alfabético.

List<String> phones = new ArrayList<>();
Collections.addAll(phones, "iPhone X", "Nokia 9", "Huawei Nexus 6P",
        "Samsung Galaxy S8", "LG G6", "Xiaomi MI6", "Sony Xperia Z5",
        "Asus Zenfone 3", "Meizu Pro 6", "Heizu Pro 6",
        "pixel 2");

phones.stream().filter(s -> s.matches("A-Z")).sorted(Comparator.comparingInt(String::length)).forEach(System.out::println);

Trato de usar partidos, pero hago un error en alguna parte, ya que no hay ninguna emisión. ¿Cómo puedo arreglar esto?

también:

Pocas cosas a una reparación no habría, es necesario asegurarse de que hay dos clasificaciones diferentes de cuerdas, uno que tiene cualquier letra mayúscula y otro que no lo hace. Para ello se puede crear particiones en la lista como:

Map<Boolean, List<String>> partitionedValues = phones.stream()
        .collect(Collectors.partitioningBy(a -> containsUpperCase(a)));

donde containsUpperCasela aplicación podría ser similar a:

boolean containsUpperCase(String value) {
    for (char ch : value.toCharArray()) {
        if (Character.isUpperCase(ch)) {
            return true;
        }
    }
    return false;
}

Una vez que haya particionado los datos tales como que necesita para sumarlos en una sola lista final como:

List<String> finalOutput = partitionedValues.get(Boolean.TRUE) // with upper case
        .stream()
        .sorted(Comparator.comparing(String::length)) // sorted by length
        .collect(Collectors.toList());

finalOutput.addAll(partitionedValues.get(Boolean.FALSE) // without uppercase
        .stream()
        .sorted(Comparator.naturalOrder()) // sorted naturally
        .collect(Collectors.toList()));

el resultado final sería entonces visible como:

finalOutput.forEach(System.out::println);

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=203771&siteId=1
Recomendado
Clasificación