有没有办法使用正则表达式搜索Set内的String?
例如,我想在哈希集中搜索AAA * B,并期望结果AAAAB,AAB等。
如果没有这样的东西,你会建议使用什么而不是散列集?
这是如何像sql一样搜索数据的类似问题?
答案 0 :(得分:2)
HashSet肯定不会让你到任何地方。它专为非常有效的精确查找而设计,但对模糊查找完全没用,因为它没有任何范围或接近度的概念。
没有支持此类搜索的标准数据结构。
您可以使用NavigableSet
接口(TreeSet作为标准实现)自己实现此功能的一部分。
但理想情况下,您需要使用类似Radix tree的东西,它不是标准的Java数据结构。
当然,您仍然可以使用HashSet以强制方式实现它,迭代所有条目并根据您的模式检查每个条目。但是你的性能将是O(n)而不是O(1),因此使用HashSet没有任何好处(除了消除重复),你也可以使用ArrayList。
答案 1 :(得分:0)
肯定你可以但不能开箱即用......你可以在一个过滤器中组合Streams和regex:
例如,假设你有一个f字符串,你需要/只需要那些不是数字的字符串:Set<String> languages = new HashSet<>(Arrays.asList("0", "java", "c++", "1234", "1999"));
Set<String> resultFilteredLanguages = languages.stream().filter(line -> !line.matches("\\d+")).collect(Collectors.toSet());
resultFilteredLanguages.forEach(System.out::println);