Move util method to sequence CompletableFuture's to new class 'UtilFuture'
This commit is contained in:
parent
fe06fba406
commit
22dbcbf90d
@ -0,0 +1,24 @@
|
|||||||
|
package mineplex.core.common.util;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class UtilFuture
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns a {@link CompletableFuture} which will complete when supplied futures have completed.
|
||||||
|
* This is a workaround for {@link CompletableFuture#anyOf(CompletableFuture[])} returning void.
|
||||||
|
*
|
||||||
|
* @param futures the futures to wait to complete
|
||||||
|
* @param <T> the return type of the supplied futures
|
||||||
|
* @return a future which will complete when all supplied futures have completed
|
||||||
|
*/
|
||||||
|
public static <T> CompletableFuture<List<T>> sequence(List<CompletableFuture<T>> futures)
|
||||||
|
{
|
||||||
|
CompletableFuture<Void> futuresCompletedFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
|
||||||
|
|
||||||
|
return futuresCompletedFuture.thenApply(v ->
|
||||||
|
futures.stream().map(CompletableFuture::join).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
}
|
@ -11,7 +11,6 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
@ -25,6 +24,7 @@ import mineplex.core.common.jsonchat.JsonMessage;
|
|||||||
import mineplex.core.common.util.BukkitFuture;
|
import mineplex.core.common.util.BukkitFuture;
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
import mineplex.core.common.util.F;
|
import mineplex.core.common.util.F;
|
||||||
|
import mineplex.core.common.util.UtilFuture;
|
||||||
import mineplex.core.portal.Portal;
|
import mineplex.core.portal.Portal;
|
||||||
import mineplex.core.preferences.PreferencesManager;
|
import mineplex.core.preferences.PreferencesManager;
|
||||||
import mineplex.core.report.command.ReportHandlerNotification;
|
import mineplex.core.report.command.ReportHandlerNotification;
|
||||||
@ -230,21 +230,12 @@ public class ReportManager
|
|||||||
public CompletableFuture<Integer> calculatePriority(Report report)
|
public CompletableFuture<Integer> calculatePriority(Report report)
|
||||||
{
|
{
|
||||||
// todo take into account age of report
|
// todo take into account age of report
|
||||||
return sequence(_reportProfileRepository.getProfiles(report.getReporterIds())).thenApply(reportProfiles -> reportProfiles.stream()
|
return UtilFuture.sequence(_reportProfileRepository.getProfiles(report.getReporterIds())).thenApply(reportProfiles -> reportProfiles.stream()
|
||||||
.mapToInt(profile -> profile.getReputation(report.getCategory()))
|
.mapToInt(profile -> profile.getReputation(report.getCategory()))
|
||||||
.map(operand -> operand * 100)
|
.map(operand -> operand * 100)
|
||||||
.sum());
|
.sum());
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo move to utility class
|
|
||||||
private static <T> CompletableFuture<List<T>> sequence(List<CompletableFuture<T>> futures)
|
|
||||||
{
|
|
||||||
CompletableFuture<Void> futuresCompletedFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
|
|
||||||
|
|
||||||
return futuresCompletedFuture.thenApply(v ->
|
|
||||||
futures.stream().map(CompletableFuture::join).collect(Collectors.toList()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void publishChatSnap(Report report, boolean updateChat)
|
public void publishChatSnap(Report report, boolean updateChat)
|
||||||
{
|
{
|
||||||
// todo is this the best way to store Future's?
|
// todo is this the best way to store Future's?
|
||||||
|
Loading…
Reference in New Issue
Block a user