select操作蝎抽,獲取list中bean對象中的某一列值
業(yè)務(wù)場景:通常我們獲取list中bean對象中的某個屬性值,需要寫一個for 循環(huán)路克,代碼會比較冗余樟结。話不多說,直接上代碼
1精算、自定義方法
public interface Select<T> {
T select(Object obj) ;
}
/*
*選擇對象集合的屬性值
*<T extends Comparable<T> ,D>
*/
public static final <T,D> Set<T> select(Collection<D> colls ,String fieldName){
return select(colls,new Select<T>(){
@Override
public T select(Object obj){
Object v=getFieldValueByName(obj,fieldName);
return (T)v;
}
});
}
/**
* 通過接口函數(shù)選擇對象集合的屬性值
* @param colls
* @param gb
* @return 這里使用set作為返回值是為了去重瓢宦,當(dāng)然也可以使用List
* <T extends Comparable<T> ,D>
*/
public static final <T,D> Set<T> select(Collection<D> colls,Select<T> gb){
Iterator<D> iter = colls.iterator() ;
Set<T> set=new HashSet<T>();
while(iter.hasNext()) {
D d = iter.next() ;
T t = gb.select(d) ;
if(t!=null){
set.add(t);
}
}
return set;
}
2、Java stream流
-
獲取某一列的值灰羽,并且裝換為String驮履,先擼代碼
public static void main(String[] args) { List<User> list = new ArrayList(); User user1 = new User(); user1.setId(1L); user1.setMobile("123456"); list.add(user1); User user2 = new User(); user2.setId(2L); user1.setMobile("12345678"); list.add(user2); //獲取某一列的值 List<String> ids = list.stream().map(f -> f.getId()).collect(Collectors.toList()); System.out.println(ids); }
原理
image.png
對于stream流中包含的元素鱼辙,使用給定的轉(zhuǎn)換函數(shù)(f -> String.valueOf(f.getId())),進(jìn)行轉(zhuǎn)換操作玫镐,新生成的stream流只包含轉(zhuǎn)換生成的元素倒戏。
map方法還有三個對于原始類型的變種方法,分別是:mapToInt恐似,mapToLong和mapToDouble杜跷。這三個方法也比較好理解,比如mapToInt就是把原始Stream轉(zhuǎn)換成一個新的Stream矫夷,這個新生成的Stream中的元素都是int類型葛闷。之所以會有這樣三個變種方法,可以免除自動裝箱/拆箱的額外消耗双藕;
3淑趾、獲取list中bean對象中的某一列值,并且轉(zhuǎn)換類型
public static void main(String[] args)
{
List<User> list = new ArrayList();
User user1 = new User();
user1.setId(1L); user1.setMobile("123456");
list.add(user1);
User user2 = new User();
user2.setId(2L); user1.setMobile("12345678");
list.add(user2);
//獲取某一列的值忧陪,并且裝換為String
List<String> ids = list.stream().map(f -> String.valueOf(f.getId())).collect(Collectors.toList());
System.out.println(ids);
}