如何将多个树集中的匹配元素合二为一?

时间:2018-04-17 18:32:04

标签: java treeset

我有多个树集,它们都有不同的值。我试图从每个树集中获取匹配的元素,并将其放在一个最终的树集中。

所以我要找的是

树集1有一个b c d

树集2有b d e g

和树集三有b e d h

我的返回树集将有b和d

我试过的代码是

   TreeSet<String> uniqueWords = uniqueWords(words);
    TreeSet[] results = new TreeSet[uniqueWords.size()];
    int i = 0;
    for (String word : uniqueWords) {
      // get will return a TreeSet
      results[i] = ((TreeSet)HashMap.get(word));
      if (results[i] == null) {
        return new TreeSet();
      }
      i++;
    }
    TreeSet finalList =  new ReferenceSet();;
    for (int step = 1; i < results.length; step++) {
      finalList.retainAll(results[step]);
    }
    return finalList;`

1 个答案:

答案 0 :(得分:1)

您正在寻找的是多个集合的交集,可以通过Collection#retainAll实现(正如您在问题中已有的那样)。如果您希望最终Set分开(而不是三个初始Set之一),您可以使用以下内容:

SortedSet<String> intersection = new TreeSet<>(setA);

intersection.retainAll(setB);
intersection.retainAll(setC);

以下是一个例子:

var setA = new TreeSet<>(List.of("a", "b", "c", "d"));
var setB = new TreeSet<>(List.of("b", "d", "e", "g"));
var setC = new TreeSet<>(List.of("b", "e", "d", "h"));

var intersection = new TreeSet<>(setA);

intersection.retainAll(setB);
intersection.retainAll(setC);

System.out.println(intersection);

输出:

[b, d]