【发布时间】:2015-03-02 01:56:49
【问题描述】:
我在我的代码中使用 LinkedHashSet,有时我需要从一个元素开始在 HashSet 的所有元素中迭代和运行算法。
所以如果我的集合包含数字 1、2、3、4、5。我想从 3 而不是 1 开始循环。这可能吗?
谢谢。
【问题讨论】:
-
以编程方式一切皆有可能,只需在您的情况下使用 if 条件。您在寻找任何 API 代码吗?
标签: java loops linkedhashset
我在我的代码中使用 LinkedHashSet,有时我需要从一个元素开始在 HashSet 的所有元素中迭代和运行算法。
所以如果我的集合包含数字 1、2、3、4、5。我想从 3 而不是 1 开始循环。这可能吗?
谢谢。
【问题讨论】:
标签: java loops linkedhashset
“从 3 开始循环”有两种可能的含义。您可能意味着您只需要列表中等于或大于 3 的项目。或者您可能意味着您希望在按特定顺序排序时跳过前 2 个项目。我建议您在代码中明确说明您的含义。如果您使用的是 Java 8,那么流提供了一个很好的机制来做到这一点:
myHashSet.stream()
.sorted(myComparator)
.skip(2)
.collect(Collectors.toList());
或
myHashSet.stream()
.filter(n -> n >= 3)
.collect(Collectors.toList());
【讨论】:
您可以将其复制到ArrayList 中,以便您可以使用subList(int, int);然后你可以使用for-each loop like
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
【讨论】:
如果您使用TreeSet 而不是LinkedHashSet,则可以使用tailSet() 方法。如果您以这种方式使用它:mySet.tailSet(3),它将返回您的集合的视图(这也是一个Set),仅包含3, 4, 5。
【讨论】: