Java:如何应用过滤器来设置?

标签 java collections java-8 set treeset

在我的程序中,我有不同的场景

开始时集合将为空,如下所示:

[]

用户可以动态地在集合中添加值,假设用户输入起始和结束整数为 2 和 6,集合将如下所示:

[2,3,4,5,6]

A) 用户可以做什么:

用户可以这样做后,假设用户输入 1 和 2,设置将如下所示:

[1,2,3,4,5,6]

用户也可以这样做,假设用户输入 6 和 8,设置如下:

[1,2,3,4,5,6,7,8]

B) 用户不能做的是:

假设用户输入 2 和 6,因为 2,3,4,5,6 已存在于集合中,因此程序应向用户输出错误消息。

用户也不能这样做,假设用户输入 0 和 10 作为 0,1,2,3,4,5,6,7,8,9,10 粗体整数已经存在于设置,因此程序应该向用户输出错误消息。

C) 最终结果:

最终设置应该是这样的[1,2,3,4,5,6,7,8]

更新:

用户也可以这样做,比如在开始时设置为空,如下所示:

[]

用户输入1和3,设置如下:

[1,2,3]

后记用户输入5和7,设置如下:

[1,2,3,5,6,7]

用户输入3和5后,设置将是这样的

[1,2,3,4,5,6,7]

我怎样才能实现这一点,任何帮助将不胜感激。

到目前为止我所尝试的方法不起作用:

Scanner reader = new Scanner(System.in);

System.out.println("Enter a start: ");
int s = reader.nextInt();

System.out.println("Enter a end: ");
int e = reader.nextInt();

Set<Double> filterSet = new TreeSet<>();


for (int i = s; i <= n; i++) {            
    if(filterSet.stream().allMatch(x -> x>=s && x<=e)){
        System.out.println("Error");
        }
        else{
            filterSet.add(i);
            }
}

最佳答案

您的流表达式不起作用的原因是您对范围的定义不一致。这种不一致会产生许多边缘情况,您在决定结果是否有效时必须对其进行测试。一些示例(来自您的更新):

从一个空集 Ø 开始,将其与 [1,3] 并集(请注意,这是数学中的闭集 ) 给出结果 {1,2,3}

将之前的结果与 [5,7](另一个闭集)合并,得到 {1,2,3,5,6,7}

将结果与 (3,5) 合并(注意这是一个开集),得到 {1,2,3,4,5 ,6,7}

如果我们停在这里,您可以创建一个连贯的规则,其中如果 cardinality 则计算被视为成功。结果的基数大于原始集合的基数,|currentValue| > |前一个值|。但是,您在原始帖子中提供了一个示例,其中计算了 [0,10][1,8] 的并集,其中此规则失败(即,值 { 0,9,10} 已添加到集合中)。即使结果的基数 11 大于前一个值的基数 8,计算也会被视为失败。

您甚至可以慷慨地将所有新输入视为开集,[1,8] ∪ (0,10) ⇔ [1,8] ∪ [1,9] (< em>请注意从开放集到封闭集的更改),但这仍然会导致您没有预料到的一项更改(9 已添加到集合中),因此需要进行测试边缘情况。

存在类似的情况,您从集合 [2,6] (即 {2,3,4,5,6})开始并将其合并与 [1,2) (注意部分开集)会导致 [1,6] (即 {1 ,2,3,4,5,6}),即使它导致像前面的示例一样的单个更改,也被认为是成功的。在本例中,元素 1 被添加到集合中,而不是元素 9

在一种情况下,我将一个元素添加到序列的末尾,在另一种情况下,我将元素添加到序列的开头。为什么要区别对待这些?

在您提供一致的方法来确定结果是否有效之前,您不应期望得到高质量的问题答案。

参见:notation

关于Java:如何应用过滤器来设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46084907/

相关文章:

java-8 - Java 8 - 通用供应商

java - 如何使用 Gson 序列化和反序列化 Java 8 的 java.time 类型?

java - 一个异常工作的java循环,

javafx 绑定(bind) : Text bind to two properties

java - 查询多态 Hibernate 属性

java - 只读 EnumSet 迭代器线程安全吗?

java - 在appender中指定多个文件

java - 如何在java中接收 map 的差异?

collections - 如何组合列表元素并找到最大组合的价格

java - 从 List<Map<String,String>> 中提取值(不是键),并将其展平为 List<String>