summaryrefslogtreecommitdiff
path: root/src/main/java/sevenUnits/unit
diff options
context:
space:
mode:
authorAdrien Hopkins <ahopk127@my.yorku.ca>2022-04-18 17:41:43 -0500
committerAdrien Hopkins <ahopk127@my.yorku.ca>2022-04-18 17:41:43 -0500
commit40f7b6e806140fc2fc741c63c71f5ce97b4bd1d2 (patch)
treee43ce4a066da9714da5d7274a443e98b818e73a5 /src/main/java/sevenUnits/unit
parentf0541a955b6e4b12d808cffec0874f50a004e8b9 (diff)
Implemented one-way conversion, duplicate prefixes can now be hidden
Diffstat (limited to 'src/main/java/sevenUnits/unit')
-rw-r--r--src/main/java/sevenUnits/unit/BritishImperial.java2
-rw-r--r--src/main/java/sevenUnits/unit/UnitDatabase.java26
-rw-r--r--src/main/java/sevenUnits/unit/UnitType.java24
3 files changed, 41 insertions, 11 deletions
diff --git a/src/main/java/sevenUnits/unit/BritishImperial.java b/src/main/java/sevenUnits/unit/BritishImperial.java
index c6e65fb..0ecba6d 100644
--- a/src/main/java/sevenUnits/unit/BritishImperial.java
+++ b/src/main/java/sevenUnits/unit/BritishImperial.java
@@ -121,5 +121,5 @@ public final class BritishImperial {
public static final Unit FAHRENHEIT = Unit
.fromConversionFunctions(Metric.KELVIN.getBase(),
tempK -> tempK * 1.8 - 459.67, tempF -> (tempF + 459.67) / 1.8)
- .withName(NameSymbol.of("degrees Fahrenheit", "\u00B0F"));
+ .withName(NameSymbol.of("degree Fahrenheit", "\u00B0F"));
}
diff --git a/src/main/java/sevenUnits/unit/UnitDatabase.java b/src/main/java/sevenUnits/unit/UnitDatabase.java
index a4f0c44..71676a1 100644
--- a/src/main/java/sevenUnits/unit/UnitDatabase.java
+++ b/src/main/java/sevenUnits/unit/UnitDatabase.java
@@ -1160,16 +1160,16 @@ public final class UnitDatabase {
}
/**
- * @return true if entry represents a removable duplicate entry of unitMap.
+ * @return true if entry represents a removable duplicate entry of map.
* @since 2021-05-22
*/
- static boolean isRemovableDuplicate(Map<String, Unit> unitMap,
- Entry<String, Unit> entry) {
- for (final Entry<String, Unit> e : unitMap.entrySet()) {
+ static <T> boolean isRemovableDuplicate(Map<String, T> map,
+ Entry<String, T> entry) {
+ for (final Entry<String, T> e : map.entrySet()) {
final String name = e.getKey();
- final Unit value = e.getValue();
+ final T value = e.getValue();
if (lengthFirstComparator.compare(entry.getKey(), name) < 0
- && Objects.equals(unitMap.get(entry.getKey()), value))
+ && Objects.equals(map.get(entry.getKey()), value))
return true;
}
return false;
@@ -2010,12 +2010,18 @@ public final class UnitDatabase {
}
/**
+ * @param includeDuplicates if false, duplicates are removed from the map
* @return a map mapping prefix names to prefixes
- * @since 2019-04-13
- * @since v0.2.0
+ * @since 2022-04-18
+ * @since v0.4.0
*/
- public Map<String, UnitPrefix> prefixMap() {
- return Collections.unmodifiableMap(this.prefixes);
+ public Map<String, UnitPrefix> prefixMap(boolean includeDuplicates) {
+ if (includeDuplicates)
+ return Collections.unmodifiableMap(this.prefixes);
+ else
+ return Collections.unmodifiableMap(ConditionalExistenceCollections
+ .conditionalExistenceMap(this.prefixes,
+ entry -> !isRemovableDuplicate(this.prefixes, entry)));
}
/**
diff --git a/src/main/java/sevenUnits/unit/UnitType.java b/src/main/java/sevenUnits/unit/UnitType.java
index a13051a..7cebf2d 100644
--- a/src/main/java/sevenUnits/unit/UnitType.java
+++ b/src/main/java/sevenUnits/unit/UnitType.java
@@ -16,6 +16,8 @@
*/
package sevenUnits.unit;
+import java.util.function.Predicate;
+
/**
* A type of unit, as chosen by the type of system it is in.
* <ul>
@@ -31,4 +33,26 @@ package sevenUnits.unit;
*/
public enum UnitType {
METRIC, SEMI_METRIC, NON_METRIC;
+
+ /**
+ * Determines which type a unit is. The type will be:
+ * <ul>
+ * <li>{@code SEMI_METRIC} if the unit passes the provided predicate
+ * <li>{@code METRIC} if it fails the predicate but is metric
+ * <li>{@code NON_METRIC} if it fails the predicate and is not metric
+ * </ul>
+ *
+ * @param u unit to test
+ * @param isSemiMetric predicate to determine if a unit is semi-metric
+ * @return type of unit
+ * @since 2022-04-18
+ */
+ public static final UnitType getType(Unit u, Predicate<Unit> isSemiMetric) {
+ if (isSemiMetric.test(u))
+ return SEMI_METRIC;
+ else if (u.isMetric())
+ return METRIC;
+ else
+ return NON_METRIC;
+ }
}