Supponiamo di disporre di più flussi java 8 che ogni flusso potenzialmente può essere convertito in Set<AppStory>
, ora voglio con le migliori prestazioni per aggregare tutti gli stream in un flusso DISTINCT da ID, in ordine di proprietà ("lastUpdate")Qual è il modo migliore per aggregare gli stream in un DISTINCT con Java 8
ci sono diversi modi per fare ciò, ma voglio il più veloce, per esempio:
Set<AppStory> appStr1 =StreamSupport.stream(splititerato1, true).
map(storyId1 -> vertexToStory1(storyId1).collect(toSet());
Set<AppStory> appStr2 =StreamSupport.stream(splititerato2, true).
map(storyId2 -> vertexToStory2(storyId1).collect(toSet());
Set<AppStory> appStr3 =StreamSupport.stream(splititerato3, true).
map(storyId3 -> vertexToStory3(storyId3).collect(toSet());
Set<AppStory> set = new HashSet<>();
set.addAll(appStr1)
set.addAll(appStr2)
set.addAll(appStr3) , and than make sort by "lastUpdate"..
//POJO Object:
public class AppStory implements Comparable<AppStory> {
private String storyId;
private String ........... many other attributes......
public String getStoryId() {
return storyId;
}
@Override
public int compareTo(AppStory o) {
return this.getStoryId().compareTo(o.getStoryId());
}
}
... ma è il vecchio modo.
Come posso creare un unico distinto per ID ordinato flusso con la migliore prestazione
somethink come:
Set<AppStory> finalSet = distinctStream.sort((v1, v2) -> Integer.compare('not my issue').collect(toSet())
tutte le idee?
BR
Vitaly
Come si presenta il metodo 'equals'? – Flown
@Override public boolean equals (Object o) { if (this == o) return true; if (o == null || getClass()! = O.getClass()) restituisce false; AppStory appStory = (AppStory) o; return! (StoryId! = Null?! StoryId.equals (appStory.storyId): appStory.storyId! = Null); } – VitalyT
Penso qualcosa del tipo: Set dsd = Stream.of (appStr1, appStr2) .flatMap (Stream :: distinto) .sorted ((s1, s2) -> Long.compare (s1.getLastUpdateTime(), s2 . .getLastUpdateTime())) raccogliere (Toset()); –
VitalyT