lamdba表达式需要java1.8支持
(parameters)->expression
(parameters)->statements
//Function<T,R> 入参T 出参R
Function<Integer,Integer> function = (num1) -> num1 + 10;
Integer result = function.apply(10);
System.out.println(result);
//Consumer<T> 入参T 没有出参
Consumer<String> consumer = (p) -> System.out.println(p);
consumer.accept("hello world");
Consumer<Integer> consumer1 = p -> {
String x = "sdf";
System.out.println(p + x);
};
consumer1.accept(assemble);
//Supplier<T> 出参T 没有入参
Supplier<Integer> supplier = () -> 100;
Integer t = supplier.get();
System.out.println(t);
//Predicate<T> 入参T 出参boolean
Predicate<String> predicate = x -> x.endsWith("n");
boolean flag = predicate.test("sn");
System.out.println(flag);
简单举个例子使用:
在集合中每个元素前添加字符 “linux:” function
Function<String,String> function = (num1) -> "linux:" + num1 ;
List<String> list = Arrays.asList("rm","cd","cat");
list.stream().map(function).forEach(System.out::println);
/** 结果
linux:rm
linux:cd
linux:cat
*/
过滤数据 prodicate 比较数据 comparator
String[] array = {"CARRY","CATCH","amen","AJAX","daemon","eason","andy","jane"};
Predicate<String> predicate = x -> x.endsWith("n");
List<String> list = Arrays.asList(array);
list.stream().filter(predicate).forEach(System.out::println);
System.out.println(list.stream().reduce((x,j) -> x+j).get());
Arrays.sort(array,comparator);
Arrays.asList(array).forEach(System.out::println);
/**结果
amen
daemon
eason
CARRYCATCHamenAJAXdaemoneasonandyjane
AJAX
CARRY
CATCH
amen
andy
daemon
eason
jane
*/
制造数据 Supplier
Supplier<String> supplier = () -> "hello world!";
System.out.println(supplier.get());
/**结果
hello world!
*/
Map Reduce 使用
map的作用是将一个对象变为另外一个,而reduce实现的则是将所有值合并为一个
List<Double> list1 = Arrays.asList(10.0,20.0,30.0);
list1.stream().map(m -> m + 0.05).forEach(System.out::println);
Double aDouble = list1.stream().map(m -> m + 0.01).reduce((i,j)->i+j).get();
System.out.println(aDouble);
//map类型:将每个元素经过处理转换成另外一个类型(可以是同类型)
Predicate<String> predicate = (a)-> a.equals("科比");
List<String> names = Arrays.asList("姚明","科比","乔丹","詹姆斯");
names.stream().filter(predicate).forEach(System.out::println);
names.stream().map(String::new).forEach(System.out::println);
System.out.println("###################################");
List<String> dbls = Arrays.asList("11","22","33","44");
dbls.stream().mapToDouble(Double::parseDouble).forEach(System.out::println);
System.out.println("###################################");
dbls.stream().mapToInt(Integer::parseInt).forEach(System.out::println);
System.out.println("###################################");
dbls.stream().mapToLong(Long::parseLong).forEach(System.out::println);
/**结果
科比
姚明
科比
乔丹
詹姆斯
###################################
11.0
22.0
33.0
44.0
###################################
11
22
33
44
###################################
11
22
33
44
*/