总结了一下自己常用的lambda式。
package com.gm.test;
import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
import static java.lang.System.out;
/**
* Created by zhangshuai on 2017/8/26.
*/
public class LambdaTest {
private List<TestClass> list = null;
private void initMethod(){
list = new ArrayList<>();
list.add(new TestClass(1,"1"));
list.add(new TestClass(2,"a"));
list.add(new TestClass(3,"c"));
}
/**
* 转简单的foreach循环
*/
@Test
public void testForEach(){
// list.forEach(p -> {
// p.setOne(p.getOne() + 1);
// });
//参数是Consumer<? super T>
list.stream().forEach(p ->
p.setOne(p.getOne() + 1)
);
System.out.println(list);
}
/**
* 转list为Map
*/
@Test
public void testListToMap(){
this.initMethod();
// Collectors.toMap(TestClass :: getOne(key值), p -> p(value))
//参数是两个Function
// Map<Integer,Object> map = list.stream().collect(Collectors.toMap(TestClass :: getOne, p -> p));
Map<Integer,Object> map = list.stream().collect(Collectors.toMap(TestClass :: getOne, p -> p.getTwo()));
out.println(map);
}
/**
* 排序
*/
@Test
public void testSorted(){
initMethod();
//默认的排序
// 参数是Comparator<? super T>
list.stream().sorted(Comparator.comparingInt(TestClass :: getOne));
out.println(list);
//修改排序规则后的排序
//参数是Comparator<? super T>
list.sort((TestClass t1, TestClass t2) -> t2.getOne() - t1.getOne());
out.println(list);
}
/**
* 过滤
*/
@Test
public void testFilter(){
initMethod();
//filter的参数是Predicate<? super T>
List<TestClass> list2 = list.stream().filter(p -> p.getOne() > 2).collect(Collectors.toList());
System.out.println(list2);
}
/**
* max or min(获取最大或者最小)
*/
public void testMaxOrMin(){
initMethod();
//参数是Comparator<? super T>
list.stream().max(Comparator.comparingInt(TestClass :: getOne));
out.println();
}
}
注意各种方法的参数,我本人是根据参数来区分如何写的
以上是我自己常用的lambda表达式,更多请参考,developerworks我是参考这个学习的