亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

運行兩個流并從中創建一個對象

運行兩個流并從中創建一個對象

斯蒂芬大帝 2022-11-30 13:24:38
我有兩個列表List<String> a = Arrays.asList( "1" , "2" , "3" );List<String> b = Arrays.asList( "a" , "b" , "c" );和一堂課class Obj{   String a;   String b;   public Obj(String a, String b){       this.a=a;       this.b=b;   }}我必須將每個元素 2 列表轉換為上述類的對象。以這樣的方式生成 Obj 的對象列表 -[ Obj("1","a") , Obj("2","a") , Obj("3","a") ]我知道我可以簡單地通過運行一個循環來做到這一點。List<Obj> arrayList = new ArrayList<>();for( int i=0; i<allAttributes.size(); i++){    arrayList.add( new Obj(a[i],b[i]) );}想知道它是否可以在 Java 8 中以某種優雅的方式完成。
查看完整描述

2 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

鑒于 a 和 b 列表的大小相同,這應該可以解決問題,


List<Obj> objList = IntStream.range(0, a.size())

    .mapToObj(i -> new Obj(a.get(i), b.get(i)))

    .collect(Collectors.toList());


查看完整回答
反對 回復 2022-11-30
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

有幾種方法可以為列表和流實現 Zip-Operation(例如,請參閱這篇文章com.google.common.collect.Streams.zip),但您可以使用Guava Streams 中的現有方法。這樣,您的代碼可能如下所示:


final List<String> a = Arrays.asList("1", "2", "3");

final List<String> b = Arrays.asList("a", "b", "c");

List<Obj> objs = Streams.zip(a.stream(), b.stream(), (pa, pb) -> new Obj(pa, pb))

            .collect(Collectors.toList());

您可以在之后進一步過濾流,例如:


List<Obj> objs = Streams.zip(a.stream(), b.stream(), (pa, pb) -> new Obj(pa, pb))

            .filter(obj -> StringUtils.isNotEmpty(obj.b))

            .collect(Collectors.toList());


查看完整回答
反對 回復 2022-11-30
  • 2 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號