Java8 使用流抽取List<T>集合中T的某個(gè)屬性操作
在java開發(fā)中,我們經(jīng)常會(huì)遇到需要從一個(gè)集合中,抽取集合中元素的某一個(gè)屬性。在java8之前,我們通常采用for循環(huán)去獲取,但java8之后我們有了一種新的辦法,那就是stream。
話不多說,直接上代碼
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author lanfangyi
* @version 1.0
* @since 2019/5/12 13:22
*/
@Data
@AllArgsConstructor
public class User {
private Long id;
private String name;
}
class TestMainService {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
User user = new User(1L, "zhangsan");
User user1 = new User(2L, "lisi");
userList.add(user);
userList.add(user1);
List<Long> userIds = new ArrayList<>();
//第一種方式
userList.forEach(user2 -> {
userIds.add(user2.getId());
//這里可以進(jìn)行更多的操作
});
System.out.println(userIds);
//第二種方式
List<Long> userIds2 = userList.stream().map(User::getId).collect(Collectors.toList());
System.out.println(userIds2);
}
}
打印結(jié)果:
[1, 2] [1, 2]
補(bǔ)充:Java根據(jù)類屬性值從一個(gè)集合中找到和該屬性相等的對(duì)象
方法
使用common-utils包提供的CollectionUtils和BeanPropertyValueEqualsPredicate
比如找id屬性值為9587的用戶
Object obj = CollectionUtils.find(UserList.get(),
new BeanPropertyValueEqualsPredicate("id", "9587"));
if(obj == null){
log.info("not found");
}else{
//do your thing
}
find方法實(shí)現(xiàn)的大概思路
public static <T> T findElementByPropertyValue(List<T> list, String propertyName, Object value) throws Exception {
if(list == null || list.isEmpty()) {
return null;
}
PropertyDescriptor pd = new PropertyDescriptor(propertyName, list.get(0).getClass());
for (T t : list) {
Object obj = pd.getReadMethod().invoke(t);
if(StringUtils.equals(String.valueOf(value), String.valueOf(obj))) {
return t;
}
}
return null;
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
完美解決idea創(chuàng)建文件時(shí),文件不分級(jí)展示的情況
這篇文章主要介紹了完美解決idea創(chuàng)建文件時(shí),文件不分級(jí)展示的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java中對(duì)AtomicInteger和int值在多線程下遞增操作的測(cè)試
這篇文章主要介紹了Java中對(duì)AtomicInteger和int值在多線程下遞增操作的測(cè)試,本文得出AtomicInteger操作 與 int操作的效率大致相差在50-80倍上下的結(jié)論,需要的朋友可以參考下2014-09-09
SpringBoot?整合Security權(quán)限控制的初步配置
這篇文章主要為大家介紹了SpringBoot?整合Security權(quán)限控制的初步配置實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn)
JVM啟動(dòng)時(shí)分配的內(nèi)存稱為堆內(nèi)存,與之相對(duì)的,在代碼中還可以使用堆外內(nèi)存,比如Netty,廣泛使用了堆外內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn),需要的朋友可以參考下2022-07-07
關(guān)于Controller 層返回值的公共包裝類的問題
本文給大家介紹Controller 層返回值的公共包裝類-避免每次都包裝一次返回-InitializingBean增強(qiáng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-09-09

