java 開發利器:lamdaj

小灰灰同學發表於2018-07-30
導讀

過放蕩不羈的生活,容易得像順水推舟,但是要結識良朋益友,卻難如登天。—— 巴爾扎克

前言

在日常工作中,我們幾乎每一個地方都會有需要操作集合的場景,有的地方邏輯很簡單,基本上就是對一個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());

我這裡寫的都是很簡單的例子,感覺最經常用到的方法,如果大家工作中遇到很變態的集合操作不知道如何下手時,可以在這裡留言我們一起學習討論。

java 開發利器:lamdaj

更多精彩文章,請關注微信公眾號閱讀!

java 開發利器:lamdaj


相關文章