@FunctionalInterface
public interface MathOperation {
int operation(int a, int b);
static int sum(int a, int b) {
return a + b;
}
}
可以这样写:
MathOperation operation = (a, b) -> a + b; operation.operation(2, 3);方法引用::
以上是两数相加,其实MathOperation已经有sum函数,又可以写为:
MathOperation operation = (a, b) -> MathOperation.sum(a, b);
用 :: 可以简化为:
MathOperation operation = MathOperation::sum;forEach
Listletters = Arrays.asList("a", "b", "c"); for (String letter : letters) { System.out.println(letter); }
可以这样写:
ListPredicateletters = Arrays.asList("a", "b", "c"); letters.forEach(n -> System.out.println(n)); // 使用方法引用::简化为: letters.forEach(System.out::println);
Listletters = Arrays.asList("a", "ab", "c"); filter(letters, n -> n.startsWith("a")); public void filter(List letters, Predicate condition) { letters.forEach(letter -> { if (condition.test(letter)) { System.out.println(letter + "."); } }); }
可以使用stream API简化,filter参数也是Predicate:
letters.stream().filter(n -> n.startsWith("a")).forEach(n -> System.out.println(n + "."));
Predicate 有 and、or等default方法:
PredicateMappredicate = n -> n.startsWith("a"); letters.stream().filter(predicate.and(n -> n.length() == 2)) .forEach(n -> System.out.println(n + "."));
Listreduce()letters = Arrays.asList("a", "ab", "c"); letters.stream().map((String letter) -> letter + ".").forEach(System.out::println);
Listcollect()letters = Arrays.asList("a", "ab", "c"); String s = letters.stream().map((String letter) -> letter + ".") .reduce((append, letter) -> append + letter).get(); System.out.println(s);
ListsummaryStatisticsletters = Arrays.asList("ab", "ab", "c"); List list = letters.stream().filter(letter -> letter.contains("a")) .map(String::toUpperCase) .filter(letter -> letter.contains("A")) .distinct() .collect(Collectors.toList());
Listletters = Arrays.asList("1", "2", "3"); IntSummaryStatistics statistics = letters.stream().mapToInt(Integer::parseInt).summaryStatistics(); int min = statistics.getMin(); int max = statistics.getMax(); long sum = statistics.getSum(); double average = statistics.getAverage(); long count = statistics.getCount();



