gpt4 book ai didi

java - 如何在没有冗余计算的情况下过滤和映射 Java 8 流中的值?

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

我对 Java 8 Collection 流功能有肤浅的了解,所以我不确定以下是否可能:我想 filter基于整数比较的集合并重用该值进行映射。

具体来说,我有一个Collection<String> strings并希望将其每个值映射到固定的编辑距离 String x如果编辑距离小于值 levenshteinLimit .

String x = "some string";
Collection<String> strings = new LinkedList<>(Arrays.asList("not some string",
"some other string"));
int levenshteinLimit = 10;
Map<Integer, String> stringsLevenshteinMap = strings.stream()
.filter(string -> LevenshteinDistance.getDefaultInstance().apply(x, string) < levenshteinLimit)
.collect(Collectors.toMap(string -> LevenshteinDistance.getDefaultInstance().apply(x, string), Function.identity()));
System.out.println(stringsLevenshteinMap);

效果很好,表达了我正在寻找的结果,但需要冗余计算距离。到目前为止这还不是问题。没有流的解决方案也是可能的。我正在尝试学习新东西。

我认为先过滤然后映射更有效,因为对象的数量可能更小,这意味着更少的工作。

上面的代码使用 Apache commons-text 1.1。

最佳答案

带有元组中间对象的东西应该可以工作:

Map<Integer, String> stringsLevenshteinMap = strings.stream()
.map(s -> new Tuple<>(LD.getInstance().apply(x, s), s)
.filter(t -> t.getFirst() < maxDistance)
.collect(Collectors.toMap(Tuple::getFirst, Tuple::getSecond));

关于java - 如何在没有冗余计算的情况下过滤和映射 Java 8 流中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040265/

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