Java8 lambda表示式使用總結
阿新 • • 發佈:2019-02-17
總結了一下自己常用的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我是參考這個學習的