SortBy.java
package com.distasilucas.cryptobalancetracker.model;
import com.distasilucas.cryptobalancetracker.model.response.insights.UserCryptosInsights;
import java.math.BigDecimal;
import java.util.Comparator;
public enum SortBy {
PERCENTAGE(Comparator.comparing(UserCryptosInsights::percentage)),
MARKET_CAP_RANK(Comparator.comparing(UserCryptosInsights::marketCapRank)),
CURRENT_PRICE(Comparator.comparing(crypto -> new BigDecimal(crypto.marketData().currentPrice().usd()))),
MAX_SUPPLY(Comparator.comparing(crypto -> new BigDecimal(crypto.marketData().maxSupply()))),
CHANGE_PRICE_IN_24H(Comparator.comparing(crypto -> crypto.marketData().priceChange().changePercentageIn24h())),
CHANGE_PRICE_IN_7D(Comparator.comparing(crypto -> crypto.marketData().priceChange().changePercentageIn7d())),
CHANGE_PRICE_IN_30D(Comparator.comparing(crypto -> crypto.marketData().priceChange().changePercentageIn30d()));
private final Comparator<UserCryptosInsights> userCryptosInsightsComparator;
SortBy(Comparator<UserCryptosInsights> comparator) {
this.userCryptosInsightsComparator = comparator;
}
public Comparator<UserCryptosInsights> getUserCryptosInsightsComparator(SortType sortType) {
return sortType == SortType.ASC ? userCryptosInsightsComparator : userCryptosInsightsComparator.reversed();
}
}