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);