package com.brianway.learning.java8.lambda; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; /** * Created by brian on 17/2/27. * Java 8 中常用函数式接口 */ public class FunctionDescriptor { public static void main(String[] args) { //使用 Predicate Predicate nonEmptyStringPredicate = (String s) -> !s.isEmpty(); List listOfStrings = Arrays.asList("aaa", "ss", ""); List nonEmpty = filter(listOfStrings, nonEmptyStringPredicate); System.out.println("nonEmpty.size() == 2 " + (nonEmpty.size() == 2)); //使用 Consumer forEach(Arrays.asList(1, 2, 3, 4, 5), System.out::println); //使用 Function List lengthsOfWord = map( Arrays.asList("lambda", "in", "action"), String::length ); forEach(lengthsOfWord, System.out::println); } /** * 使用 Predicate */ public static List filter(List list, Predicate p) { List results = new ArrayList<>(); //TODO for (T s : list) { if (p.test(s)) { results.add(s); } } return results; } /** * 使用 Consumer */ public static void forEach(List list, Consumer c) { //TODO for (T i : list) { c.accept(i); } } /** * 使用 Function */ public static List map(List list, Function f) { List result = new ArrayList<>(); //TODO for (T s : list) { result.add(f.apply(s)); } return result; } }