package re.imc.geysermodelengine.util; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; public class BooleanPacker { private final int MAX_BOOLEANS = 24; public int booleansToInt(List booleans) { int result = 0; int i = 1; for (boolean b : booleans) { if (b) { result += i; } i *= 2; } return result; } public int mapBooleansToInt(Map booleanMap) { int result = 0; int i = 1; List keys = new ArrayList<>(booleanMap.keySet()); Collections.sort(keys); for (String key : keys) { if (booleanMap.get(key)) { result += i; } i *= 2; } return result; } public List booleansToInts(List booleans) { List results = new ArrayList<>(); int result = 0; int i = 1; int i1 = 1; for (boolean b : booleans) { if (b) { result += i; } if (i1 % MAX_BOOLEANS == 0 || i1 == booleans.size()) { results.add(result); result = 0; i = 1; } else { i *= 2; } i1++; } return results; } public List mapBooleansToInts(Map booleanMap) { List keys = new ArrayList<>(booleanMap.keySet()); List booleans = new ArrayList<>(); Collections.sort(keys); for (String key : keys) { booleans.add(booleanMap.get(key)); } return booleansToInts(booleans); } }