OnJava8-Examples/reflection/PetCounter3.java

54 lines
1.6 KiB
Java
Raw Permalink Normal View History

// reflection/PetCounter3.java
// (c)2021 MindView LLC: see Copyright.txt
2015-11-15 15:51:35 -08:00
// We make no guarantees that this code is fit for any purpose.
2016-09-23 13:23:35 -06:00
// Visit http://OnJava8.com for more book information.
2015-06-15 17:47:35 -07:00
// Using isInstance()
import java.util.*;
2016-07-05 14:46:09 -06:00
import java.util.stream.*;
import onjava.*;
import reflection.pets.*;
2015-06-15 17:47:35 -07:00
public class PetCounter3 {
2017-01-20 21:30:44 -08:00
static class Counter extends
HashMap<Class<? extends Pet>, Integer> {
2017-05-01 14:33:10 -06:00
Counter() {
super(PetCreator.ALL_TYPES.stream()
.map(type -> Pair.make(type, 0))
2016-07-05 14:46:09 -06:00
.collect(
Collectors.toMap(Pair::key, Pair::value)));
2015-06-15 17:47:35 -07:00
}
public void count(Pet pet) {
// Class.isInstance() eliminates instanceofs:
2017-01-20 21:30:44 -08:00
entrySet().stream()
.filter(pair -> pair.getKey().isInstance(pet))
.forEach(pair ->
put(pair.getKey(), pair.getValue() + 1));
2015-06-15 17:47:35 -07:00
}
@Override public String toString() {
2017-01-20 21:30:44 -08:00
String result = entrySet().stream()
.map(pair -> String.format("%s=%s",
pair.getKey().getSimpleName(),
pair.getValue()))
.collect(Collectors.joining(", "));
return "{" + result + "}";
2015-06-15 17:47:35 -07:00
}
}
public static void main(String[] args) {
2015-12-15 11:47:04 -08:00
Counter petCount = new Counter();
new PetCreator().stream()
2015-12-15 11:47:04 -08:00
.limit(20)
.peek(petCount::count)
.forEach(p -> System.out.print(
p.getClass().getSimpleName() + " "));
System.out.println("\n" + petCount);
2015-06-15 17:47:35 -07:00
}
2015-09-07 11:44:36 -06:00
}
/* Output:
2015-06-15 17:47:35 -07:00
Rat Manx Cymric Mutt Pug Cymric Pug Manx Cymric Rat
EgyptianMau Hamster EgyptianMau Mutt Mutt Cymric Mouse
Pug Mouse Cymric
{EgyptianMau=2, Mouse=2, Pet=20, Cymric=5, Rat=2,
Dog=6, Mutt=3, Hamster=1, Cat=9, Manx=7, Rodent=5,
Pug=3}
2015-09-07 11:44:36 -06:00
*/