我有一個List<Object[]> events地方[0]的每一行的是,我需要一個ID。我也有int startSeq一個特定的起始號碼。
我需要獲得一個Map<Integer,Integer>where事件 ID -> startSeq i其中 i 是從startSeq.
例子:
int startSeq = 6;
List<Object[]> events = dao.getEvents();
// ((Object[])events.get(0))[0] = 200676, ((Object[])events.get(1))[0] = 204561, ...
200676 -> 6
204561 -> 7
205156 -> 8
問題:如果我選擇一個IntStream選項作為我的流的基礎,我沒有辦法跟蹤串列(鍵)中的索引toMap:
Map<Integer,Integer> map = IntStream.range(startSeq, startSeq events.size())
.boxed().collect(Collectors.toMap(
x -> /* Can't track List, no relation to IntStream*/
Function.identity()))
如果我以 List Stream 選項為基礎,則無法跟蹤 值的順序增量toMap:
Map<Integer,Integer> map = events.stream().collect(Collectors.toMap(
x -> (Integer)x[0],
y -> /* How to relate i increment from startSeq? */)
uj5u.com熱心網友回復:
使用AtomicInteger:
AtomicInteger startSeq = new AtomicInteger(6);
Map<Integer, Integer> map = events
.stream()
.collect(Collectors.toMap(
x -> (Integer)x[0],
x -> startSeq.getAndIncrement()
));
或者 int[]
int[] startSeq = {6};
Map<Integer, Integer> map = events
.stream()
.collect(Collectors.toMap(
x -> (Integer)x[0],
x -> startSeq[0]
));
uj5u.com熱心網友回復:
您可以遍歷 (startSeq, startSeq events.size()) 的范圍并從每個索引中減去 startSeq 以映射到串列元素:
int startSeq = 6;
List<Object[]> events = List.of(new Object[]{200676,"foo"}, new Object[]{204561,"bar"}, new Object[]{205156,"baz"});
Map<Integer,Integer> map =
IntStream.range(startSeq, startSeq events.size())
.mapToObj(i -> Map.entry((Integer)(events.get(i-startSeq)[0]), i))
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
System.out.println(map);
如果您需要保留廣告訂單:
....
.collect(Collectors.toMap(Entry::getKey, Entry::getValue,(x, y) -> y, LinkedHashMap::new));
uj5u.com熱心網友回復:
一種方法是執行以下操作:
final int startSeq = 6;
final List<Object[]> events = List.of(new Object[] {1}, new Object[] {2}, new Object[] {3});
Map<Integer,Integer> map = IntStream.range(0, events.size())
.boxed().collect(Collectors.toMap(i -> (Integer)events.get(i)[0], i -> startSeq i));
請注意,這可能僅當startSeq并且events可以制作final或member變數時才有效。
uj5u.com熱心網友回復:
你可以這樣做。您可能需要稍微改變我取消參考您提到的事件物件的方式。
- 流式傳輸陣列大小的索引
- 將值和索引映射到陣列
- 然后從陣列中收集值并放置在地圖中。
int startSeq = 6;
Map<Integer, Integer> map = IntStream.range(0, events.size())
.mapToObj(i -> new int[] { (int)events.get(i)[0], i startSeq })
.collect(Collectors.toMap(arr -> arr[0],
arr -> arr[1]));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/345307.html
標籤:爪哇
上一篇:如何使變數隨處可訪問?
