過放蕩不羈的生活,容易得像順水推舟,但是要結識良朋益友,卻難如登天。—— 巴爾扎克
前言
在日常工作中,我們幾乎每一個地方都會有需要操作集合的場景,有的地方邏輯很簡單,基本上就是對一個ArrayList結果進行各種篩選,排序,聚合等操作。可是就是有的程式碼寫的很長,讓人看起來很苦逼,大迴圈巢狀小迴圈,半天找不到一句有用的地方,好長時間看懂了,原來就是對集合一些簡單的操作。lamdaj我感覺可以說是對集合操作來說一個最好用的工具了,感覺它對於集合的操作就相當於sql。用了這個,很多需要資料庫做的工作可以搬到java裡面做,是不是也減輕也資料庫壓力!
準備工作
引入maven依賴
<dependency>
<groupId>com.googlecode.lambdaj</groupId>
<artifactId>lambdaj</artifactId>
<version>2.3.3</version>
</dependency>
首先,我們新建一UserEntity類,賦予它三個屬性,id,姓名,和年齡:
public class UserEntity {
private Long userId;
private String userName;
private Integer age;
我們定義一個集合:
List<UserEntity> userList = Lists.newArrayList();
userList.add(new UserEntity(1L, "小明", 23));
userList.add(new UserEntity(2L, "小紅", 24));
userList.add(new UserEntity(3L, "小雷", 25));
userList.add(new UserEntity(4L, "小李", 26));
1、要選出大於24歲的人
List<UserEntity> userList1 = Lambda.select(userList, Lambda.having(Lambda.on(UserEntity.class).getAge(),
Matchers.greaterThan(23)));
2、選出年齡最大或者最小的人
UserEntity userMaxAge = Lambda.selectMax(userList, Lambda.on(UserEntity.class).getAge());
3、要求這個集合裡面所有的人的年齡總和
int sumAge = Lambda.sum(userList, Lambda.on(UserEntity.class).getAge());
以下幾種情況可以說最常用的
4、需要所有人的id,不加思索這麼寫:
List<Long> userIdList = Lists.newArrayList();
for (UserEntity userEntity : userList) {
userIdList.add(userEntity.getUserId());
}
聰明的我們只需這麼寫:
List<Long> userIdList = Lambda.extract(userList, Lambda.on(UserEntity.class).getUserId());
一行程式碼,是不是感覺程式碼簡潔了,可讀性好了
5、列轉行問題
有的程式設計師會在sql中用GROUP_CONCAT 方法
聰明的我們也一行搞定:
String userName = Joiner.on(",").join(Lambda.extract(userList,
Lambda.on(UserEntity.class).getUserName()));
6、最後一個,我們做一對一關係處理時,可能會需要Map<Long,UserEntity> 這樣一個資料結構
Map<Long, UserEntity> userMap = Lambda.index(userList, Lambda.on(UserEntity.class).getUserId());
我這裡寫的都是很簡單的例子,感覺最經常用到的方法,如果大家工作中遇到很變態的集合操作不知道如何下手時,可以在這裡留言我們一起學習討論。