11章-练习32


import com.example.demo.typeinfo.pets.Pet;
import com.example.demo.typeinfo.pets.Pets;

import java.util.*;

/**
* 练习32:按照MultiIterableClass示例,在NonCollectionSequence.java中添加reversed()和randomized()方法,
* 并让NonCollectionSequence实现Iteraable.然后在foreach语句中展示所有的使用方式
*/
class PetSequence {
protected Pet[] pets = Pets.createArray(8);
}

public class NonCollectionSequence extends PetSequence implements Iterable<Pet> {
public Iterator<Pet> iterator() {
return new Iterator<Pet>() {
private int index = 0;

public boolean hasNext() {
return index < pets.length;
}

public Pet next() {
return pets[index++];
}

public void remove() { // Not implemented
throw new UnsupportedOperationException();
}
};
}

public Iterable<Pet> reversed() {
return new Iterable<Pet>() {
@Override
public Iterator<Pet> iterator() {
return new Iterator<Pet>() {
int current = pets.length - 1;

@Override
public boolean hasNext() {
return current > -1;
}

@Override
public Pet next() {
return pets[current--];
}
};
}
};
}

public Iterable<Pet> randomized() {
List<Pet> petList = new ArrayList<Pet>(Arrays.asList(pets));
Collections.shuffle(petList, new Random(43));

return new Iterable<Pet>() {
@Override
public Iterator<Pet> iterator() {
return petList.iterator();
}


};
}

public static void main(String[] args) {
NonCollectionSequence nc = new NonCollectionSequence();

for (Pet p : nc) {
System.out.print(p.id() + ":" + p + " ");
}
System.out.println();
for (Pet p : nc.reversed()) {
System.out.print(p.id() + ":" + p + " ");
}
System.out.println();
for (Pet p : nc.randomized()) {
System.out.print(p.id() + ":" + p + " ");
}

}
} 
/* Output:
0:Rat 1:Manx 2:Cymric 3:Mutt 4:Pug 5:Cymric 6:Pug 7:Manx
7:Manx 6:Pug 5:Cymric 4:Pug 3:Mutt 2:Cymric 1:Manx 0:Rat
7:Manx 6:Pug 0:Rat 4:Pug 3:Mutt 1:Manx 2:Cymric 5:Cymric
*///:~
posted @ 2022-08-26 14:50  loadL  阅读(17)  评论(0)    收藏  举报