【发布时间】:2017-09-04 15:31:44
【问题描述】:
我对 Java 8 集合流功能有肤浅的了解,所以我不确定以下是否可能:我想 filter 一个基于整数比较的集合,并将该值重用于映射。
具体来说,我有一个Collection<String> strings,如果 Levenshtein 距离小于值 levenshteinLimit,我想将其每个值映射到 Levenshtein 距离到固定的 String x。
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。
【问题讨论】:
标签: java collections java-stream