java的lambda表示式 和stream介面使用
阿新 • • 發佈:2019-10-05
lambda格式
method(param->表示式);
//或者
method(param->{
語句塊;
});
示例
List<String> list=Lists.newArrayList(); list.add("jack"); list.add("test"); //表示式示例:判斷是否有匹配 boolean match=list.stream().anyMatch(item->item.equals("test")); //語句塊示例:迴圈 list.stream().forEach(item->{ String sayHi="hi,"+item; System.out.println(sayHi); });
多執行緒示例
接下來我們看一下使用lambda方式新建執行緒。
普通新建一個執行緒:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("do something");
}
}).start();
使用lambda方式:
new Thread(() -> System.out.println("do something")).start();
可以看出使用lambda會使程式碼更加簡潔優美。
集合迴圈
普通集合迴圈:
List<String> names = Lists.newArrayList(); for (String name : list) { System.out.println(name); }
使用lambda方式:
names.stream().forEach(name-> System.out.println(name));
Collection介面的stream方法
集合下的stream方法有多種用處,下面舉幾個常用的例子:
迴圈
list.stream().forEach(item->{.....})
過濾
根據條件過濾,並返回一個新的集合
list.stream().filter(item->{
return item.equals("test")?false:true;
});
list轉換成map
list物件中的一個屬性作為key,相同的key合併成一個集合。
- 定義entity:
public class StudentEntity {
private String className;
private String studentName;
}
- 進行轉換:
Map<String, List<StudentEntity>> stuMap = stuList.stream().collect(Collectors.toMap(
//對key的處理方式,此處返回className
StudentEntity::getClassName,
//對value的處理方式,轉換成一個集合
stu -> {
List<StudentEntity> list = new ArrayList<>();
list.add(stu);
return list;
},
//對重複的key進行的操作,進行合併
(oldList, newList) -> {
oldList.addAll(newList);
return oldList;
}
));
集合去重
集合中存放的是物件,根據物件屬性去重
List<String> gradeCodes = dataList.stream().map(ExcelStuBean::getGradeCode).distinct().collect(Collectors.toList());
屬性判斷
//任意一個匹配
data.stream().anyMatch(item->item.getCity().equals("北京"));
//全部匹配
data.stream().allMatch(item->item.getCity().equals("北京"));
成員查詢
//查詢第一個
Optional<String> result = list.stream().findFirst();
//查詢任意一個
Optional<String> result = list.stream().findAny();
map
map介面接收一個值,並返回一個值。
List<Long> ids = data.stream().map(Student::getId()).collect(Collectors.toList());
//此寫法等同於
List<Long> ids = data.stream().map(student->student.getId()).collect(Collectors.toList());
reduce
reduce主要用來計算,比如說我需要求出學生資訊中最高分。
//接上面的資訊map,我們改寫成求最大分數
Optional<Integer> maxScore=data.stream().map(Student::getScore()).reduce(Integer::max);
注意reduce返回的是Optional型別,這是java8中新新增的,主要