2017-02-17 107 views
1

我想使用Java 8技巧在一行中執行以下操作。Java8將對象列表轉換爲對象的一個​​屬性列表

鑑於此對象定義:

@Getter 
@Setter 
@NoArgsConstructor 
@AllArgsConstructor 
public class MyObj { 
    private String id; 
    private Double value; 
} 

List<MyObj> objects,我希望得到一個List<String> objectIds這是所有id S IN的第一列表中的對象的列表 - 以相同的順序。

我可以在Java中使用循環來做到這一點,但我相信Java8中應該有一個可以做到這一點的單線程lambda。我無法在網上找到解決方案。也許我沒有使用正確的搜索條件。

有人可能會建議一個lambda或另一個班輪這個變換?

+0

這個搜索條件不是'lambda',而是'stream api'。這裏有很多答案。 – pvg

+0

這些註釋是什麼? 'Getter'? 'Setter'? – user2357112

+0

來自龍目島嗎? –

回答

5

這應該做的伎倆:

objects.stream().map(MyObj::getId).collect(toList());

中說,方法參考::運營商允許引用在類路徑中的任何方法,並用它作爲你需要的操作拉姆達。

正如評論中所述,流保留了訂單。

+0

我首先使用'objects.sort((o1,o2) - >(int)(o1.getValue() - o2.getValue()))'''按'value'的降序排列列表。然後,我需要僅提取objectIds以傳遞到另一個函數而不更改順序。如果這種方法不能保證訂單,那麼我不能冒險使用它。 – Nik

+1

根據這個http://stackoverflow.com/a/29218074/539864它似乎在列表中的順序是有保證的 – xiumeteo

+3

@Nik比較器寫得更好'objects.sort(Comparator.comparingInt(MyObj :: getValue))''。但是,是的,訂單是有保證的。 –

相關問題