LinkedHashSet从某个元素开始循环(Java)。

时间:2015-03-02 01:56:50

标签: java loops linkedhashset

我在我的代码中使用LinkedHashSet,并且在某些时候我需要从元素开始迭代并在HashSet的所有元素中运行算法。

所以如果我的集合包含数字1,2,3,4,5。我想从3而不是1开始循环。这可能吗?

感谢。

3 个答案:

答案 0 :(得分:4)

“从3开始循环”有两种可能的含义。您可能意味着您只需要列表中等于或大于3的项目。或者您可能意味着您希望在按特定顺序排序时跳过前2项。我建议你在代码中明确说明你的意思。如果您使用的是Java 8,则流提供了一个很好的机制来执行此操作:

myHashSet.stream()
    .sorted(myComparator)
    .skip(2)
    .collect(Collectors.toList());

myHashSet.stream()
    .filter(n -> n >= 3)
    .collect(Collectors.toList());

答案 1 :(得分:2)

您可以将其复制到ArrayList,以便使用subList(int, int);然后你可以使用for-each loop之类的

HashSet<Integer> set = new LinkedHashSet<>(Arrays.asList(1, 2, 3, 4, 5));
for (Integer i : new ArrayList<>(set).subList(2, set.size())) {
    System.out.println(i);
}

或者,您可以使用相同的方法直接获取Iterator之类的

HashSet<Integer> set = new LinkedHashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Iterator<Integer> iter = new ArrayList<>(set).subList(2, set.size())
        .iterator();
while (iter.hasNext()) {
    System.out.println(iter.next());
}

两个输出(请求的)

3
4
5

答案 2 :(得分:1)

如果您使用TreeSet而不是LinkedHashSet,则可以使用方法tailSet()。如果您以这种方式使用它:mySet.tailSet(3),它将返回您的集合的视图(也是Set),仅包含3, 4, 5