如何从 SortedSet<String> 中提取子集
How to subSet from SortedSet<String>
我必须编写一个代码,使删除以 K 开头的 SortedSet 中的所有单词成为可能。
import java.util.*;
public class Deleter {
public static void deleteKWords(SortedSet<String> set) {
set.subSet("K", "");
}
}
}
我听说使用子集可以简单地解决,但我不能。
您可以通过使用 Java 8 流来实现您想要的:
public static SortedSet<String> deleteKWords(SortedSet<String> set) {
return new TreeSet<>(set
.stream()
.filter((s) -> !s.startsWith("K"))
.collect(Collectors.toSet()));
}
编辑:
避免每次都创建新对象并只修改发送给方法的对象可能会更有效率:
public static SortedSet<String> deleteKWords(SortedSet<String> set) {
set.removeAll(set
.stream()
.filter((s) -> s.startsWith("K"))
.collect(Collectors.toList()));
return set;
}
您可以简单地通过组合 subSet() 和 removeAll() 方法来做到这一点:
public static void deleteKWords(SortedSet<String> set) {
Set s = new TreeSet<>(set.subSet("K", "O"));
set.removeAll(s);
}
我必须编写一个代码,使删除以 K 开头的 SortedSet 中的所有单词成为可能。
import java.util.*;
public class Deleter {
public static void deleteKWords(SortedSet<String> set) {
set.subSet("K", "");
}
}
}
我听说使用子集可以简单地解决,但我不能。
您可以通过使用 Java 8 流来实现您想要的:
public static SortedSet<String> deleteKWords(SortedSet<String> set) {
return new TreeSet<>(set
.stream()
.filter((s) -> !s.startsWith("K"))
.collect(Collectors.toSet()));
}
编辑: 避免每次都创建新对象并只修改发送给方法的对象可能会更有效率:
public static SortedSet<String> deleteKWords(SortedSet<String> set) {
set.removeAll(set
.stream()
.filter((s) -> s.startsWith("K"))
.collect(Collectors.toList()));
return set;
}
您可以简单地通过组合 subSet() 和 removeAll() 方法来做到这一点:
public static void deleteKWords(SortedSet<String> set) {
Set s = new TreeSet<>(set.subSet("K", "O"));
set.removeAll(s);
}