我有一個物體,看起來像這樣:
我有一個物體,看起來像這樣:
public class Snippet {
private Integer docId;
private Integer page;
private Payload有效載荷。
輸入資料是一個List<Snippet>
我需要創建一個索引,使我們能夠遍歷docIds和頁面,并獲得相關的Snippet物件。
因此,一個像這樣的資料結構:
Map<Integer, Map<Integer, List<Snippet>>>/code>
我可以使用Java流來獲得Map<Integer, Map<Integer, Snippet>>--但是這不會在最后收集Snippets的串列。
List<Snippet> input = ....;
input.stream()
.collect(Collectors.groupingBy(
Snippet::getDocId,
Collectors.toMap(Snippet::getPage, Function.identity()
)
);
我如何進行收集,以獲得一個List作為最終的map值?
uj5u.com熱心網友回復:
正如你所看到的,Collectors.groupingBy(.)獲得收集器作為第二個引數。所以,只要使用Collectors.groupingBy(.)作為Collectors.groupingBy(.)的第二個引數即可。
input.stream().collectors.groupingBy(
Snippet::getDocId,
Collectors.groupingBy(Snippet::getPage,
Collectors.toList())));
uj5u.com熱心網友回復:
這里是另一個備選方案,供你現在或將來考慮。 它使用地圖介面的computeIfAbsent方法
- 創建最終的內容地圖。
- 遍歷
Snippets的串列。
- 如果
DocId不存在,創建以DocId為鍵的條目。然后嘗試并存盤page和Snippet。
- 如果
page不存在,創建以page為鍵的條目。然后將Snippet存盤在串列中。
下面是一個使用記錄來代替類的例子。
record PayLoad(String getValue) {
@Override
public String toString() {
return "["/span> getValue() "]"。
}
}
record Snippet(int getDocId, int getPage,
PayLoad getPayLoad) {
@Override {
public String toString() {
return String.format("{%s, %s, %s}"/span>, getDocId,
getPage, getPayLoad)。)
}
}
創建一些資料
List<Snippet> input =
串列。 of(new Snippet(1, 1, new PayLoad("A"/span>))。
new Snippet(1, 2, new PayLoad("B"/span>))。
new Snippet(1, 3, new PayLoad("C"/span>))。
new Snippet(2, 1, new PayLoad("D"/span>))。
new Snippet(2, 2, new PayLoad("E"/span>))。
new Snippet(2, 3, new PayLoad("F") )。
存盤片段
Map<Integer, Map<Integer, List<Snippet>> map =
new HashMap<>()。
for (Snippet s : input) {
map.computeIfAbsent(s.getDocId(), v -> new HashMap<>())
.computeIfAbsent(s.getPage(),
v -> new ArrayList<> ()
.add(s)。
}
列印它們
map.forEach((k, v) -> {
System.out.println(k)。
v.forEach((kk, vv) -> System.out.
.println(" "/span> kk " -> "/span> vv))。
});
prints
1
1 -> [{1, 1, [A]}]
2 -> [{1, 2, [B]}]
3 -> [{1, 3, [C]}]
2, [C]].
1 -> [{2, 1, [D]]
2 -> [{2, 2, [E]}]
3 -> [{2, 3, [F]}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321066.html
標籤:
