![](/img/trans.png)
[英]How to get particular index for any data from list using Java Stream?
[英]Get Pojo from a java list using parallel stream without using any kind of index
我有一個Java列表,如下所示:
FileService fileService = new FileService("testi");
List<FilePojo> list = fileService.getAllFiles();
我想做的是遍歷列表,從中獲取FilePojo
對象並打印某些屬性。 我可以通過執行以下操作來實現:
for (FilePojo filePojo : list){
System.out.println(filePojo.getId()+" "+filePojo.getName());
}
然后我偶然發現了Stream api,並嘗試如下重構我的代碼:
Stream.of(list).parallel().forEach(filePojo -> {
System.out.println(filePojo);
}
});
使用此方法,我無法從filePojo訪問getter(與第一種方法不同),盡管我可以看到如下所示的對象:
[pojo.FilePojo@56528192, pojo.FilePojo@6e0dec4a, pojo.FilePojo@96def03, pojo.FilePojo@5ccddd20, pojo.FilePojo@1ed1993a, pojo.FilePojo@1f3f4916, pojo.FilePojo@794cb805, pojo.FilePojo@4b5a5ed1]
如果使用這樣的索引,則可以訪問getter:
Stream.of(list).parallel().forEach(filePojo -> {
for (int i = 0; i < list.size(); i++) {
System.out.println("=============================\n" + "Element at " + i + "\n" + filePojo.get(i).getId() + "\n" + filePojo.get(i).getCustomerId() + "\n" + filePojo.get(i).getFileName() + "\n ========================");
}
});
是否可以在不使用索引的情況下從列表流中獲取Pojo(類似於第一種方法)? 還是我需要借助索引來解決此問題?
您以錯誤的方式使用Stream.of()方法,正在創建列表流,而不是其中的對象流。
試試這個:
list.stream()
.parallel()
.forEach(filePojo -> System.out.println(filePojo.getId() + " " + filePojo.getName()));
您可以使用流來執行以下操作:
list.stream() // Stream<FilePojo>
.map(filePojo -> filePojo.getId() + " " + filePojo.getName())
.forEach(System.out::println);
使用Stream.of
,你就必須flatMap
,因為你最終創建流Stream<List<FilePojo>>
而不是作為
Stream.of(list) // Stream<List<FilePojo>>
.flatMap(List::stream) // Stream<FilePojo>
.map(filePojo -> filePojo.getId() + " " + filePojo.getName())
.forEach(System.out::println);
進一步閱讀 : 如果可能,是否應該始終使用並行流?
當然,您可以創建一個“流”,將其映射然后打印:
list.stream()
.map(filePojo -> filePojo.getId() + " " + filePojo.getName())
.forEach(e -> System.out.println(e));
Stream.of(list)
讀為“創建列表流”,但是您想要的是“在列表中創建元素流”,因此list.stream
上面的list.stream
。
此外,當您不確定是否可以從並行處理中受益時,請不要粗心地調用Stream.of(list).parallel()
,它可能會比順序方法帶來更差的性能。
但是實際上,如果您需要的只是上述內容,那么就不需要這樣做,只需繼續執行您的方法或執行以下操作:
list.forEach(f -> System.out.println(f.getId()+" "+f.getName()));
因為列表具有forEach
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.