在java 8中查找具有最大小写字符数的字符串

时间:2017-12-08 01:53:00

标签: java-8

我需要找到给定列表中包含最大小写字符数的字符串。

这就是我目前正在做的事情

public static void main(String[] args) {

        List<String> list  = new ArrayList<>();

        list.add("Strig a with ABDD");
        list.add("STR dfd  BC dsff");

        OptionalLong max = list.stream().map(s->countLowerCase(s)).mapToLong(i->Long.valueOf(i)).max();
        System.out.println(max);

    }


    private static long countLowerCase(String inputString) {
        return inputString.chars().filter((s)->Character.isLowerCase(s)).count();
    }

有没有更好的方法呢?

3 个答案:

答案 0 :(得分:1)

使用Stream API,我认为有一种稍微简单(单线程?)的方法。

list.stream()
            .flatMap(s -> Stream.of(s.chars()
                    .filter(Character::isLowerCase)
                    .count()))
            .max(Comparator.naturalOrder())
            .ifPresent(System.out::println);

或明显更简单的解决方案:

long max = list.stream()
            .mapToLong(s -> s.chars().filter(Character::isLowerCase).count())
            .max()
            .getAsLong();

答案 1 :(得分:1)

是的,Comparator界面中有一些静态方法可以帮助您缩短上述代码:

System.out.println(list.stream()
        .max(Comparator.comparingLong(s -> s.chars().filter(Character::isLowerCase).count())).get()
        .chars().filter(Character::isLowerCase).count());

您的输出将是:9

答案 2 :(得分:0)

您无需执行map后跟mapToLong,因为您可以首先使用mapToLong返回功能{/ 1}}:

long

没有更简单的方法。如果您真的想获得“具有最大小写字符数的字符串”而不是仅限数字,您可以使用:

    List<String> list  = Arrays.asList("Strig a with ABDD", "STR dfd  BC dsff");

    list.stream()
        .mapToLong(s -> s.chars().filter(Character::isLowerCase).count())
        .max()
        .ifPresent(System.out::println);

将打印list.stream() .max(Comparator.comparingLong(s -> s.chars().filter(Character::isLowerCase).count())) .ifPresent(System.out::println); ,因为这是列表中包含最大小写字符数的字符串。