Dish
public class Dish {
public Dish(String name, boolean vegetarian, int calories, Type type) {
this.name = name;
this.vegetarian = vegetarian;
this.calories = calories;
this.type = type;
}
public String getName() {
return name;
}
public int getCalories() {
return calories;
}
public boolean isVegetarian() {
return vegetarian;
}
public Type getType() {
return type;
}
private final String name;
private final boolean vegetarian;
private final int calories;
private final Type type;
public enum Type {MEAT, FISH, OTHER}
Initializing Data
private static List<Dish> menu = Arrays.asList(
new Dish("pork", false, 800, Dish.Type.MEAT)
, new Dish("beef", false, 700, Dish.Type.MEAT)
, new Dish("chicken", false, 400, Dish.Type.MEAT)
, new Dish("french fries", true, 530, Dish.Type.OTHER)
, new Dish("rice", true, 350, Dish.Type.OTHER)
, new Dish("season fruit", true, 120, Dish.Type.OTHER)
, new Dish("pizza", true, 550, Dish.Type.OTHER)
, new Dish("prawns", false, 300, Dish.Type.FISH)
, new Dish("prawns", false, 300, Dish.Type.FISH)
, new Dish("salmon", false, 450, Dish.Type.FISH) );
Summing int
static void summingIntCollector(){
int totalCalories = menu.stream()
.collect(summingInt(Dish::getCalories));
System.out.println(totalCalories);
}
Summarizing int
static void summarizingIntStaticsCollector(){
IntSummaryStatistics statistics = menu.stream()
.collect(summarizingInt(Dish::getCalories));
System.out.println(statistics.toString());
}
Average int
static void averageIntCollector(){
Double averagingCalories = menu.stream().collect(averagingInt(Dish::getCalories));
System.out.println(averagingCalories);
}
Joining
static void joiningCollector(){
String shortMenu = menu.stream().map(Dish::getName).collect(joining(", "));
System.out.println(shortMenu);
}
Summing(by reducing)
static void reducingCollector(){
int totalCalories = menu.stream().collect(reducing(0, Dish::getCalories, (i, j) -> i + j));
System.out.println(totalCalories);
}
Max(by reducing)
static void reducingMaxCollector(){
Optional<Dish> optional = menu.stream().collect(reducing(
(dish1, dish2) -> dish1.getCalories()>dish2.getCalories()?dish1:dish2));
optional.ifPresent(dish -> System.out.println(dish.getCalories()));
}