diff --git a/pom.xml b/pom.xml index 10e5035e..37cbf712 100644 --- a/pom.xml +++ b/pom.xml @@ -37,8 +37,8 @@ maven-compiler-plugin 3.1 - 1.9 - 1.9 + 1.8 + 1.8 diff --git a/src/main/java/lambdasinaction/chap1/FilteringApples.java b/src/main/java/lambdasinaction/chap1/FilteringApples.java index 51afc8cb..06a8c8dc 100644 --- a/src/main/java/lambdasinaction/chap1/FilteringApples.java +++ b/src/main/java/lambdasinaction/chap1/FilteringApples.java @@ -3,6 +3,8 @@ import java.util.*; import java.util.function.Predicate; +import static java.util.stream.Collectors.toList; + public class FilteringApples{ public static void main(String ... args){ @@ -31,6 +33,10 @@ public static void main(String ... args){ List weirdApples = filterApples(inventory, (Apple a) -> a.getWeight() < 80 || "brown".equals(a.getColor())); System.out.println(weirdApples); + + //stream api不用自己定义任何其他方法,来实现 + List collect = inventory.stream().filter(apple -> "green".equals(apple.getColor())).collect(toList()); + System.out.println(collect); } public static List filterGreenApples(List inventory){ diff --git a/src/main/java/lambdasinaction/chap10/OperationsWithOptional.java b/src/main/java/lambdasinaction/chap10/OperationsWithOptional.java index d2940969..7315f02f 100644 --- a/src/main/java/lambdasinaction/chap10/OperationsWithOptional.java +++ b/src/main/java/lambdasinaction/chap10/OperationsWithOptional.java @@ -12,11 +12,11 @@ public static void main(String... args) { System.out.println(max(empty(), of(5))); Optional opt1 = of(5); - Optional opt2 = opt1.or(() -> of(4)); + // Optional opt2 = opt1.or(() -> of(4)); - System.out.println( - of(5).or(() -> of(4)) - ); +// System.out.println( +// of(5).or(() -> of(4)) +// ); } public static final Optional max(Optional i, Optional j) { diff --git a/src/main/java/lambdasinaction/chap10/OptionalMain.java b/src/main/java/lambdasinaction/chap10/OptionalMain.java index dcd97792..1a16a413 100644 --- a/src/main/java/lambdasinaction/chap10/OptionalMain.java +++ b/src/main/java/lambdasinaction/chap10/OptionalMain.java @@ -1,8 +1,6 @@ package lambdasinaction.chap10; -import java.util.*; - -import static java.util.stream.Collectors.toSet; +import java.util.Optional; public class OptionalMain { @@ -13,12 +11,12 @@ public String getCarInsuranceName(Optional person) { .orElse("Unknown"); } - public Set getCarInsuranceNames(List persons) { - return persons.stream() - .map(Person::getCar) - .map(optCar -> optCar.flatMap(Car::getInsurance)) - .map(optInsurance -> optInsurance.map(Insurance::getName)) - .flatMap(Optional::stream) - .collect(toSet()); - } +// public Set getCarInsuranceNames(List persons) { +// return persons.stream() +// .map(Person::getCar) +// .map(optCar -> optCar.flatMap(Car::getInsurance)) +// .map(optInsurance -> optInsurance.map(Insurance::getName)) +// .flatMap(Optional::stream) +// .collect(toSet()); +// } } diff --git a/src/main/java/lambdasinaction/chap2/RunTest.java b/src/main/java/lambdasinaction/chap2/RunTest.java new file mode 100644 index 00000000..197dac9d --- /dev/null +++ b/src/main/java/lambdasinaction/chap2/RunTest.java @@ -0,0 +1,14 @@ +package lambdasinaction.chap2; + +/** + * Created by tangm on 2017/7/1. + */ +public class RunTest { + public static void main(String[] args) { + + new Thread(() -> { + System.out.println("hello word"); + }).run(); + + } +} diff --git a/src/main/java/lambdasinaction/chap4/Dish.java b/src/main/java/lambdasinaction/chap4/Dish.java index 96307644..a73dbed5 100644 --- a/src/main/java/lambdasinaction/chap4/Dish.java +++ b/src/main/java/lambdasinaction/chap4/Dish.java @@ -35,7 +35,7 @@ public enum Type { MEAT, FISH, OTHER } @Override public String toString() { - return name; + return "【"+name+","+calories+","+vegetarian+","+type+"】"; } public static final List menu = diff --git a/src/main/java/lambdasinaction/chap6/CollectorHarness.java b/src/main/java/lambdasinaction/chap6/CollectorHarness.java index 8370be16..087ff8a3 100644 --- a/src/main/java/lambdasinaction/chap6/CollectorHarness.java +++ b/src/main/java/lambdasinaction/chap6/CollectorHarness.java @@ -6,7 +6,7 @@ public class CollectorHarness { public static void main(String[] args) { //System.out.println("Partitioning done in: " + execute(PartitionPrimeNumbers::partitionPrimes) + " msecs"); - System.out.println("Partitioning done in: " + execute(PartitionPrimeNumbers::partitionPrimesWithCustomCollector) + " msecs" ); +// System.out.println("Partitioning done in: " + execute(PartitionPrimeNumbers::partitionPrimesWithCustomCollector) + " msecs" ); } private static long execute(Consumer primePartitioner) { diff --git a/src/main/java/lambdasinaction/chap6/Grouping.java b/src/main/java/lambdasinaction/chap6/Grouping.java index 9105cc80..0c257f0d 100644 --- a/src/main/java/lambdasinaction/chap6/Grouping.java +++ b/src/main/java/lambdasinaction/chap6/Grouping.java @@ -1,9 +1,11 @@ package lambdasinaction.chap6; -import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; import static java.util.stream.Collectors.*; -import static lambdasinaction.chap6.Dish.dishTags; import static lambdasinaction.chap6.Dish.menu; public class Grouping { @@ -13,8 +15,8 @@ enum CaloricLevel { DIET, NORMAL, FAT }; public static void main(String ... args) { System.out.println("Dishes grouped by type: " + groupDishesByType()); System.out.println("Dish names grouped by type: " + groupDishNamesByType()); - System.out.println("Dish tags grouped by type: " + groupDishTagsByType()); - System.out.println("Caloric dishes grouped by type: " + groupCaloricDishesByType()); +// System.out.println("Dish tags grouped by type: " + groupDishTagsByType()); +// System.out.println("Caloric dishes grouped by type: " + groupCaloricDishesByType()); System.out.println("Dishes grouped by caloric level: " + groupDishesByCaloricLevel()); System.out.println("Dishes grouped by type and caloric level: " + groupDishedByTypeAndCaloricLevel()); System.out.println("Count dishes in groups: " + countDishesInGroups()); @@ -32,14 +34,14 @@ private static Map> groupDishNamesByType() { return menu.stream().collect(groupingBy(Dish::getType, mapping(Dish::getName, toList()))); } - private static Map> groupDishTagsByType() { - return menu.stream().collect(groupingBy(Dish::getType, flatMapping(dish -> dishTags.get( dish.getName() ).stream(), toSet()))); - } +// private static Map> groupDishTagsByType() { +// return menu.stream().collect(groupingBy(Dish::getType, flatMapping(dish -> dishTags.get( dish.getName() ).stream(), toSet()))); +// } - private static Map> groupCaloricDishesByType() { -// return menu.stream().filter(dish -> dish.getCalories() > 500).collect(groupingBy(Dish::getType)); - return menu.stream().collect(groupingBy(Dish::getType, filtering(dish -> dish.getCalories() > 500, toList()))); - } +// private static Map> groupCaloricDishesByType() { +//// return menu.stream().filter(dish -> dish.getCalories() > 500).collect(groupingBy(Dish::getType)); +// return menu.stream().collect(groupingBy(Dish::getType, filtering(dish -> dish.getCalories() > 500, toList()))); +// } private static Map> groupDishesByCaloricLevel() { return menu.stream().collect( diff --git a/src/main/java/lambdasinaction/chap6/PartitionPrimeNumbers.java b/src/main/java/lambdasinaction/chap6/PartitionPrimeNumbers.java index 69d7c4ca..a14d9302 100644 --- a/src/main/java/lambdasinaction/chap6/PartitionPrimeNumbers.java +++ b/src/main/java/lambdasinaction/chap6/PartitionPrimeNumbers.java @@ -1,17 +1,16 @@ package lambdasinaction.chap6; -import java.util.*; -import java.util.function.*; -import java.util.stream.*; +import java.util.List; +import java.util.Map; +import java.util.stream.IntStream; -import static java.util.stream.Collectors.*; -import static java.util.stream.Collector.Characteristics.*; +import static java.util.stream.Collectors.partitioningBy; public class PartitionPrimeNumbers { public static void main(String ... args) { System.out.println("Numbers partitioned in prime and non-prime: " + partitionPrimes(100)); - System.out.println("Numbers partitioned in prime and non-prime: " + partitionPrimesWithCustomCollector(100)); +// System.out.println("Numbers partitioned in prime and non-prime: " + partitionPrimesWithCustomCollector(100)); } @@ -26,15 +25,15 @@ public static boolean isPrime(int candidate) { .noneMatch(i -> candidate % i == 0); } - public static Map> partitionPrimesWithCustomCollector(int n) { - return IntStream.rangeClosed(2, n).boxed().collect(new PrimeNumbersCollector()); - } +// public static Map> partitionPrimesWithCustomCollector(int n) { +// return IntStream.rangeClosed(2, n).boxed().collect(new PrimeNumbersCollector()); +// } - public static boolean isPrime(List primes, Integer candidate) { - double candidateRoot = Math.sqrt((double) candidate); - //return takeWhile(primes, i -> i <= candidateRoot).stream().noneMatch(i -> candidate % i == 0); - return primes.stream().takeWhile(i -> i <= candidateRoot).noneMatch(i -> candidate % i == 0); - } +// public static boolean isPrime(List primes, Integer candidate) { +// double candidateRoot = Math.sqrt((double) candidate); +// //return takeWhile(primes, i -> i <= candidateRoot).stream().noneMatch(i -> candidate % i == 0); +// return primes.stream().takeWhile(i -> i <= candidateRoot).noneMatch(i -> candidate % i == 0); +// } /* public static List takeWhile(List list, Predicate p) { int i = 0; @@ -47,60 +46,60 @@ public static List takeWhile(List list, Predicate p) { return list; } */ - public static class PrimeNumbersCollector - implements Collector>, Map>> { +// public static class PrimeNumbersCollector +// implements Collector>, Map>> { - @Override - public Supplier>> supplier() { - return () -> new HashMap>() {{ - put(true, new ArrayList()); - put(false, new ArrayList()); - }}; - } - - @Override - public BiConsumer>, Integer> accumulator() { - return (Map> acc, Integer candidate) -> { - acc.get( isPrime( acc.get(true), - candidate) ) - .add(candidate); - }; - } +// @Override +// public Supplier>> supplier() { +// return () -> new HashMap>() {{ +// put(true, new ArrayList()); +// put(false, new ArrayList()); +// }}; +// } - @Override - public BinaryOperator>> combiner() { - return (Map> map1, Map> map2) -> { - map1.get(true).addAll(map2.get(true)); - map1.get(false).addAll(map2.get(false)); - return map1; - }; - } +// @Override +// public BiConsumer>, Integer> accumulator() { +// return (Map> acc, Integer candidate) -> { +// acc.get( isPrime( acc.get(true), +// candidate) ) +// .add(candidate); +// }; +// } - @Override - public Function>, Map>> finisher() { - return i -> i; - } +// @Override +// public BinaryOperator>> combiner() { +// return (Map> map1, Map> map2) -> { +// map1.get(true).addAll(map2.get(true)); +// map1.get(false).addAll(map2.get(false)); +// return map1; +// }; +// } - @Override - public Set characteristics() { - return Collections.unmodifiableSet(EnumSet.of(IDENTITY_FINISH)); - } - } +// @Override +// public Function>, Map>> finisher() { +// return i -> i; +// } +// +// @Override +// public Set characteristics() { +// return Collections.unmodifiableSet(EnumSet.of(IDENTITY_FINISH)); +// } +// } - public Map> partitionPrimesWithInlineCollector(int n) { - return Stream.iterate(2, i -> i + 1).limit(n) - .collect( - () -> new HashMap>() {{ - put(true, new ArrayList()); - put(false, new ArrayList()); - }}, - (acc, candidate) -> { - acc.get( isPrime(acc.get(true), candidate) ) - .add(candidate); - }, - (map1, map2) -> { - map1.get(true).addAll(map2.get(true)); - map1.get(false).addAll(map2.get(false)); - }); - } +// public Map> partitionPrimesWithInlineCollector(int n) { +// return Stream.iterate(2, i -> i + 1).limit(n) +// .collect( +// () -> new HashMap>() {{ +// put(true, new ArrayList()); +// put(false, new ArrayList()); +// }}, +//// (acc, candidate) -> { +//// acc.get( isPrime(acc.get(true), candidate) ) +//// .add(candidate); +//// }, +// (map1, map2) -> { +// map1.get(true).addAll(map2.get(true)); +// map1.get(false).addAll(map2.get(false)); +// }); +// } }