首页 > 解决方案 > 从 Set 中删除负值

问题描述

我预计 remove() 方法会删除负值并仅打印正整数,但输出为 -1 -2 -3 4

 import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;

    public class GenericSetTester {
        public static void main(String[] args) {

            Set<Integer> integerSet = new HashSet<>();

            integerSet.add(0);
            integerSet.add(1);
            integerSet.add(2);
            integerSet.add(3);
            integerSet.add(4);
            integerSet.add(-1);
            integerSet.add(-2);
            integerSet.add(-3);

            for(Iterator<Integer> in = integerSet.iterator(); in.hasNext();){
                if(in.next() < 0)
                    in.remove();
                   int i = in.next();
                System.out.printf("%d ",i);
            }
        }
    }

标签: javaloopscollectionsiteratorset

解决方案


@Eran 答案纠正了您当前的方法。请注意,流提供了另一种处理您的要求的方法:

Integer[] array = new Integer[] {0, 1, 2, 3, 4, -1, -2, -3};
Set<Integer> integerSet = new HashSet<>(Arrays.asList(array));
integerSet = integerSet.stream()
    .filter(i -> i >= 0)
    .collect(Collectors.toSet());

推荐阅读