Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 查找java 8中最大小写字符数的字符串_Java 8 - Fatal编程技术网

Java 8 查找java 8中最大小写字符数的字符串

Java 8 查找java 8中最大小写字符数的字符串,java-8,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.stre

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

这就是我目前所做的

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();
    }
publicstaticvoidmain(字符串[]args){
列表=新的ArrayList();
列表。添加(“带ABDD的Strig a”);
列表。添加(“STR dfd BC dsff”);
OptionalLong max=list.stream().map(s->countLowerCase(s)).mapToLong(i->Long.valueOf(i)).max();
系统输出打印项次(最大值);
}
私有静态长countLowerCase(字符串inputString){
返回inputString.chars().filter((s)->Character.isLowerCase().count();
}

有没有更好的办法

使用
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();

是的,
Comparator
接口中有一个静态方法,可以帮助您将上述代码缩短一点:

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

您的输出将是:
9

无需执行
map
然后执行
mapToLong
,因为您首先可以使用
mapToLong
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);

它将用ABDD打印
Strig a
,因为这是列表中小写字符数最多的字符串。

为什么您认为,
.flatMap(s->Stream.of(expression))
.map(s->expression)
更简单?同样地,
mapToLong(…).max()
在我看来比
map(…).max(Comparator.naturalOrder())
简单,换句话说,OP已经比以前的所有答案更接近最简单的解决方案了……如果您仍要对结果执行此操作,那么让比较器在每次比较中重复此评估是不必要的开销。一张
地图
再加上一个自然比较会更简单、更有效,但这正是OP已经具备的。
list.stream()
    .max(Comparator.comparingLong(s -> s.chars().filter(Character::isLowerCase).count()))
    .ifPresent(System.out::println);