gpt4 book ai didi

java - 收集具有最大长度的所有字符串的列表

转载 作者:行者123 更新时间:2023-11-30 06:53:33 26 4
gpt4 key购买 nike

<分区>

我目前正在努力进行以下练习:

Given a Stream<String> collect (using Collector) a Collection of all Strings with maximum lenght.

这是我尝试过的:

private static class MaxStringLenghtCollector 
implements Collector<String, List<String>, List<String>> {

@Override
public Supplier<List<String>> supplier() {
return LinkedList::new;
}
@Override
public BiConsumer<List<String>, String> accumulator() {
return (lst, str) -> {
if(lst.isEmpty() || lst.get(0).length() == str.length())
lst.add(str);
else if(lst.get(0).length() < str.length()){
lst.clear();
lst.add(str);
}
};
}

@Override
public BinaryOperator<List<String>> combiner() {
return (lst1, lst2) -> {
lst1.addAll(lst2);
return lst1;
};
}

@Override
public Function<List<String>, List<String>> finisher() {
return Function.identity();
}

@Override
public Set<java.util.stream.Collector.Characteristics> characteristics() {
return EnumSet.of(Characteristics.IDENTITY_FINISH);
}
}

所以我编写了我的自定义收集器来完成这项工作,但是......它看起来确实很丑。也许有一些标准的方法可以做到这一点。例如,我会尝试分组收集器:

public static Collection<String> allLongest(Stream<String> str){
Map<Integer, List<String>> groups = str.collect(Collectors.groupingBy(String::length));
return groups.get(groups.keySet()
.stream()
.mapToInt(x -> x.intValue())
.max()
.getAsInt());
}

但这既丑陋又低效。首先,我们构建一个 Map , 然后遍历它构建一个 Set然后遍历得到max- List .

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com