diff --git a/src/main/java/ua/net/uid/utils/comparators/ComparableComparator.java b/src/main/java/ua/net/uid/utils/comparators/ComparableComparator.java new file mode 100644 index 0000000..479b5cb --- /dev/null +++ b/src/main/java/ua/net/uid/utils/comparators/ComparableComparator.java @@ -0,0 +1,33 @@ +/* + * Copyright 2019 nightfall. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ua.net.uid.utils.comparators; + +import java.util.Comparator; + +class ComparableComparator> implements Comparator { + private final boolean nullFirst; + + public ComparableComparator(boolean nullFirst) { this.nullFirst = nullFirst; } + public ComparableComparator() { this(true); } + + @Override + public int compare(T o1, T o2) { + if (o1 == o2) return 0; + if (o1 == null) return nullFirst ? -1 : 1; + if (o2 == null) return nullFirst ? 1 : -1; + return o1.compareTo(o2); + } +} \ No newline at end of file diff --git a/src/main/java/ua/net/uid/utils/comparators/NullComparator.java b/src/main/java/ua/net/uid/utils/comparators/NullComparator.java new file mode 100644 index 0000000..0e8a2d0 --- /dev/null +++ b/src/main/java/ua/net/uid/utils/comparators/NullComparator.java @@ -0,0 +1,37 @@ +/* + * Copyright 2019 nightfall. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package ua.net.uid.utils.comparators; + +import java.util.Comparator; + +class NullComparator implements Comparator { + private final Comparator notNullComparator; + private final boolean nullFirst; + + public NullComparator(Comparator notNullComparator, boolean nullFirst) { + this.notNullComparator = notNullComparator; + this.nullFirst = nullFirst; + } + public NullComparator(Comparator notNullComparator) { this(notNullComparator, true); } + + @Override + public int compare(T o1, T o2) { + if (o1 == o2) return 0; + if (o1 == null) return nullFirst ? -1 : 1; + if (o2 == null) return nullFirst ? 1 : -1; + return notNullComparator.compare(o1, o2); + } +} \ No newline at end of file diff --git a/src/main/java/ua/net/uid/utils/comparators/NumberComparator.java b/src/main/java/ua/net/uid/utils/comparators/NumberComparator.java index 1a65b4e..8f228ef 100644 --- a/src/main/java/ua/net/uid/utils/comparators/NumberComparator.java +++ b/src/main/java/ua/net/uid/utils/comparators/NumberComparator.java @@ -22,7 +22,7 @@ import java.util.concurrent.atomic.AtomicLong; /** - * + * * @author nightfall */ public class NumberComparator implements Comparator { @@ -33,13 +33,13 @@ private NumberComparator() {} @Override + //@SuppressWarnings("unchecked") public int compare(Number o1, Number o2) { if (o1 == o2) return 0; if (o1 == null) return -1; if (o2 == null) return 1; - if (o1.getClass() == o2.getClass() && o1 instanceof Comparable) - return ((Comparable) o1).compareTo((Comparable) o2); - + if (o1.getClass().equals(o2.getClass()) && o1 instanceof Comparable) + return cmp(Comparable.class.cast(o1), Comparable.class.cast(o2)); if (o1 instanceof BigDecimal) return compareBig((BigDecimal)o1, o2); if (o2 instanceof BigDecimal) return -compareBig((BigDecimal) o2, o1); if (o1 instanceof BigInteger) return compareBig((BigInteger) o1, o2); @@ -47,7 +47,11 @@ return isInteger(o1) && isInteger(o2) ? Long.compare(o1.longValue(), o1.longValue()) - : Double.compare(o1.floatValue(), o2.floatValue()); + : Double.compare(o1.doubleValue(), o2.doubleValue()); + } + + private static > int cmp(T o1, T o2) { + return o1.compareTo(o2); } private static boolean isInteger(Number val) { diff --git a/src/main/java/ua/net/uid/utils/helpers/CommonHelper.java b/src/main/java/ua/net/uid/utils/helpers/CommonHelper.java index e97d3ad..9c7af9f 100644 --- a/src/main/java/ua/net/uid/utils/helpers/CommonHelper.java +++ b/src/main/java/ua/net/uid/utils/helpers/CommonHelper.java @@ -104,7 +104,8 @@ return result; } - public T minBy(Comparator comparator, T ... items) { + @SafeVarargs + public static T minBy(Comparator comparator, T ... items) { T result = null; if (!isEmpty(items)) { for (T item : items) @@ -114,7 +115,8 @@ return result; } - public T maxBy(Comparator comparator, T ... items) { + @SafeVarargs + public static T maxBy(Comparator comparator, T ... items) { T result = null; if (!isEmpty(items)) { for (T item : items) diff --git a/src/main/java/ua/net/uid/utils/time/DailyEquation.java b/src/main/java/ua/net/uid/utils/time/DailyEquation.java index 4b31cdb..23f8154 100644 --- a/src/main/java/ua/net/uid/utils/time/DailyEquation.java +++ b/src/main/java/ua/net/uid/utils/time/DailyEquation.java @@ -20,8 +20,6 @@ * * https://www.aa.quae.nl/en/reken/zonpositie.html * - * TODO: переделать под java.time - * * @author nightfall */ public class DailyEquation { diff --git a/src/test/java/ua/net/uid/utils/helpers/RandomHelperTest.java b/src/test/java/ua/net/uid/utils/helpers/RandomHelperTest.java index 751878c..e370374 100644 --- a/src/test/java/ua/net/uid/utils/helpers/RandomHelperTest.java +++ b/src/test/java/ua/net/uid/utils/helpers/RandomHelperTest.java @@ -7,7 +7,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -class RandomHelperTest { //TODO RandomHelperTest +class RandomHelperTest { RandomHelperTest() { }