Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中具有多个约束(时间和大小)的集合_Java_Collections - Fatal编程技术网

Java中具有多个约束(时间和大小)的集合

Java中具有多个约束(时间和大小)的集合,java,collections,Java,Collections,我有两个过程(生产者/消费者)。第一个将元素放入集合中,第二个读取它们 我希望第二个进程不要读取每个元素,而是等到: 集合中至少有N个元素或 最后一个元素是在T秒前收到的 Java 5+中是否有允许这种行为的集合?我在考虑实现,但我发现DelayQueue并不是我所需要的 谢谢。我将实现一个可观察的集合。第二个进程将侦听事件,表示N元素在集合中(基于size属性的事件),并且在特定时间内没有添加任何元素(需要一个计时器,在每次add操作时重置) 类似这样的内容(仅起草尺寸要求): 公共Obs

我有两个过程(生产者/消费者)。第一个将元素放入集合中,第二个读取它们

我希望第二个进程不要读取每个元素,而是等到:

  • 集合中至少有N个元素
  • 最后一个元素是在T秒前收到的
Java 5+中是否有允许这种行为的集合?我在考虑实现,但我发现DelayQueue并不是我所需要的

谢谢。

我将实现一个可观察的集合。第二个进程将侦听事件,表示
N
元素在集合中(基于
size
属性的事件),并且在特定时间内没有添加任何元素(需要一个计时器,在每次
add
操作时重置)

类似这样的内容(仅起草尺寸要求):

公共ObservableCollection实现了收集{
私人int sizetrigger;
私人收藏;
私有集合侦听器=新的ArrayList();
公共可观测集合(集合){
this.collection=collection;
}
@凌驾
布尔添加(对象元素){
集合。添加(元素);
如果(大小>=sizeTrigger){
fireSizeEvent();
}
}
私有fireSizeEvent(){
for(侦听器:侦听器){
侦听器。阈值已达到(此);
}
}
//addListener、RemovelListener和接口方法的实现
}

我不知道java系列中有类似的东西,guava似乎也没有。也许,如果你试着在LinkedList上自己做,并在这里询问你是否有任何问题,会更容易一些?谢谢。我还发现这也可能是一个很好的起点。
public ObservableCollection implements Collection {

   private int sizetrigger;
   private Collection collection;
   private Collection<Listener> listeners = new ArrayList<Listener>();
   public ObservableCollection(Collection collection) {
     this.collection = collection;
   }

   @Override
   boolean add(Object element) {
     collection.add(element);
     if (size >= sizeTrigger) {
        fireSizeEvent();
     }
   }

   private fireSizeEvent() {
      for(Listener listener:listeners) {
         listener.thresholdReached(this);
      }
   }

   // addListener, removeListener and implementations of interface methods
}