【问题标题】:LinkedHashSet loop from some element onwards (Java).LinkedHashSet 从某些元素开始循环(Java)。
【发布时间】:2015-03-02 01:56:49
【问题描述】:

我在我的代码中使用 LinkedHashSet,有时我需要从一个元素开始在 HashSet 的所有元素中迭代和运行算法。

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

谢谢。

【问题讨论】:

  • 以编程方式一切皆有可能,只需在您的情况下使用 if 条件。您在寻找任何 API 代码吗?

标签: java loops linkedhashset


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以将其复制到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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        • 1970-01-01
        • 2022-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多