Bir listeye eklenen elemanlar Iterator ile alınmakta ve ekrana basılmaktadırAşağıdaki örnekte bir listeye eklenen elemanlar Iterator ile alınmakta ve ekrana basılmaktadır :
import java.util.*;
public class IteratorTest {
public static void main(String[] args) {
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Iterator<Integer> iterator=list.iterator();
while(iterator.hasNext()){
Integer item=iterator.next();
System.out.println(item);
}
}
}
Bir vector'e eklenen elemanlar Enumeration ile alınmakta ve ekrana basılmaktadırAşağıdaki örnekte bir vector'e eklenen elemanlar Enumeration ile alınmakta ve ekrana basılmaktadır :
import java.util.*;
public class EnumerationTest {
public static void main(String[] args) {
Vector<Integer> vector=new Vector<Integer>();
vector.add(1);
vector.add(2);
vector.add(3);
Enumeration<Integer> enumeration=vector.elements();
while(enumeration.hasMoreElements()){
Integer item=enumeration.nextElement();
System.out.println(item);
}
}
}
Bir listenin belirli sayıda eleman sayılarına göre bölünmesiElinizde bir listenin belirli sayıda eleman sayılarına göre bölünüp verilmesi için aşağıdaki gibi bir kod yazılabilir. Aşağıdaki örnek bir listeyi 3'lü gruplar halinde vermekte ve ekrana basmaktadır :
List> groupList=new ArrayList>();
ArrayList list=new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
list.add("10");
for (int i=0;i3) {
if((i+3)<=(list.size()-1)){
groupList.add(list.subList(i, i+3));
}else{
groupList.add(list.subList(i,list.size()));
}
}
for (List sublist : groupList) {
System.out.println("grup:");
for (String item : sublist) {
System.out.println(item);
}
}
Örnek listeye 10 madde ekledik (farklı eleman sayılı listelerle deneyebilirsiniz). Bir sonraki bölümde 3 sayısına göre listeyi parçaladık. En son bölümde ise parçaladığımız liste grubunu ekrana bastırdık.
Bir BlockingQueue'e girilen elemanları alan en basit tüketici (consumer) aşağıdaki gibi yapılabilir:
import java.util.concurrent.BlockingQueue;
public class SimpleConsumer implements Runnable{
private final BlockingQueue<Integer> queue;
public SimpleConsumer(BlockingQueue<Integer> queue) {
this.queue=queue;
}
@Override
public void run() {
while (true) {
try {
System.out.println("element bekleniyor ");
int element=queue.take();
System.out.println("element alindi : "+element);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
SimpleConsumer sınıfı bir Thread'dir ve kurucu ile Integer değerleri tutan bir BlockingQueue almaktadır. Sonsuz döngü içinde queue.take() yöntemi ile kuyruğa girilen elemanları beklemektedir. take() yöntemi thread'i kuyruğa yeni bir eleman gelene kadar bekletir. Yeni bir eleman geldiğinde sayıyı alır ve ekrana basar. Sonrasında kuyrukta başka elamanları sırayla alır. Eğer kuyrukta eleman kalmaz ise beklemeye devam eder. SimpleConsumer dışarıdan sonlanmadığı sürece devam edecektir.
SimpleConsumer sınıfı test etmek için aşağıdaki gibi bir uygulama yapılabilir:
import java.util.Scanner;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class ConsumerBlockingQueueTest {
public static void main(String[] args) {
BlockingQueue<Integer> queue = new ArrayBlockingQueue(1000);
SimpleConsumer consumerTest = new SimpleConsumer(queue);
Thread t = new Thread(consumerTest);
t.start();
boolean exit=false;
try (Scanner scanner = new Scanner(System.in)) {
while(!exit) { // sayi disinda herhangi bir sey girilirse uygulamadan cikilir
String input = scanner.next();
try {
int number=Integer.parseInt(input);
queue.add(number);
} catch (NumberFormatException e) {
exit=true;
}
}
}
System.out.println("exit");
System.exit(0);
}
}
İlk olarak en fazla 1000 elemanın olabileceği bir BlockingQueue yaratılır. Ardından SimpleConsumer thread'i başlatılır. Kullanıcıdan sürekli sayı almak için scanner sonsuz döngüye alınır. Alınan sayı queue.add(number) ile kuyruğa eklenir. Kullanıcı sayı dışında bir değer girdiğinde döngü sonlanır ve uygulama kapatılır.
Uygulama aşağıdaki gibi test edilebilir :
element bekleniyor
10
element alindi : 10
element bekleniyor
25
element alindi : 25
element bekleniyor
35
element alindi : 35
element bekleniyor
E
exit
Uygulama ilk açıldığında SimpleConsumer element bekleniyor mesajını yazar ve int element=queue.take(); satırında bekler. 10 değerini girdiğinizde değer kuyruğa eklenir ve SimpleConsumer kuyruktan alır ve element alindi : 10 mesajını basar ve yeni değeri beklemeye başlar. Diğer sayılar içinde aynı durum devam eder. E yazıldığında uygulama sonlanır.