2015-10-03 34 views
0

映射我有以下代碼:結果變換與預測的順序

users.stream() 
       .sorted((u1, u2) -> u2.getScore().compareTo(u1.getScore())) 
       .limit(count) 
       .collect(Collectors.toMap((User::getName), (User::getScore))); 

內容是正確的,但是當我想的foreach - 它的不可預知的結果輸出。我認爲這是因爲在引擎蓋下使用了HashMap。

有沒有辦法收集到mp與可預測的結果?

+1

使用'toMap(<?超級Ť,?延伸K>功能keyMapper,功能<?超級Ť,?延伸U> valueMapper,BinaryOperator mergeFunction,供應商 mapSupplier)' ,並且如果合併函數不假設發生,則使合併函數拋出異常。 –

+0

@Alexis C.我不應該提供合併功能。我有獨特的名字 – gstackoverflow

+2

這就是爲什麼我說在合併函數中拋出一個異常。 –

回答

0

這工作:

  return users.stream() 
      .sorted((u1, u2) -> u2.getScore().compareTo(u1.getScore())) 
      .limit(count) 
      .collect(Collectors.toMap((User::getName), (User::getScore), (k, v) -> { 
         throw new RuntimeException(String.format("Duplicate key %s", k)); 
        }, 
        LinkedHashMap::new));