English 中文(简体)
从 Java 的 Set 筛选项目
原标题:Filter out items from Set in Java
  • 时间:2012-05-23 16:23:07
  •  标签:
  • java

我有一份我需要排序/过滤的项目清单(即字符串)。

最后的结果应该是 non 包含任何重复( 容易), 我会把它们全部放入“ 设定 ” 。 所以我现在有一套字符串 。

更多解释..

我还有一个方法 x 来计算两个字符串之间的差数( 使用 levenstein 距离) 。

" 强 " 问:

在将新的字符串 string in my Set set 插入到我的 Set >set 之前,我要检查 levenstein 距离 使用方法 >x s>set 中的任何其他字符串之间 ,如果 x return

除了插入的每个 string 外, 我最擅长的是什么?

最佳回答

通过 set 迭接将是你最好的赌注,因为不存在任何有助于缩小可能性的内置 < code> set 执行 。

问题回答

我玩弄了我如何做的想法,我无法想出不做任何迭代的办法来做到这一点。

假设您有名为 距离( String, String):int 的方法, 返回两个字符串之间的给定距离 。

String x = "Obi-wan"; //this is the item subject to eval addition
List<String> items = new ArrayList<String>(asList("Luke","Yoda","Anakin"));
if (items.filter(s -> distance(s, x) >= 3).getFirst() == null) {
  items.add(x);
}

如果您使用 < a href=" "http://jdk8.java.net/lambda/" rel="nofollow" >JDK8 Preach , 您可以在不使用精确的上面代码的情况下做到这一点。 Iterables. getFirst () 方法不会将整个收藏复制, 但直到找到第一个符合标准的元素为止 。

否则您可能不得不执行预设接口和过滤方法。

interface Predicate<T> {
    public boolean eval(T o);
}

public static void main(String[] args) {
   final String x = "Obi-wan"; //this is the item subject to eval addition
   List<String> items = new ArrayList<String>(asList("Luke","Yoda","Anakin"));
   Predicate<String> p = new Predicate<String>() {
       public boolean eval(String s){ 
           return distance(s, x) >= 3;
       }
   };
   if(filter(items, p).isEmpty()){ 
        items.add(x);
   }
}

public static <T> List<T> filter(List<? extends T> items, Predicate<? super T> predicate){
    List<T> destiny = new ArrayList<T>();
    for(T item : items){
       if(predicate.eval(item){
           destiny.add(item);
       }
    }
    return destiny;
}

或者,一旦发现第一个符合标准的项目,你可以停止过滤。

您可以在创建集时使用自定义比较器 。 在您的比较器中, 如果两个字符串相同( 按照常规字符串比较规则), 或者它们的 Levenstein 距离符合您的标准, 则返回两个字符串相同 。

当昏迷者说两个字符串相同时, 新的字符串不会插入集 。 (请注意, 这意味着字符串的最终结果可能取决于插入的顺序 )

更新 :回应关于总订单的评论:

使用上文建议的参照国,将使最终结果取决于插入的顺序(如上所述),任何其他解决办法也是如此,因为使用的Levenstein距离标准没有界定总订单。

OTOH, 一旦字符串通过了不平等测试, 并被插入集中, 集中的其他字符串都不会与此字符串相提并论, 所以集中的字符串将使用自然字符串顺序, 以定义总顺序, 因此在设定的内部操作中不再出现不一致之处( 例如排序 ) 。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...