Changeset 13803 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
2018-05-21T14:15:26+02:00 (16 months ago)
Author:
Don-vip
Message:

add new class PrimitiveComparator

Location:
trunk/src/org/openstreetmap/josm/data/osm
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveComparator.java

    r13569 r13803  
    22package org.openstreetmap.josm.data.osm;
    33
    4 import static java.util.Comparator.comparing;
    5 import static java.util.Comparator.comparingInt;
    6 
    74import java.util.Comparator;
    8 import java.util.HashMap;
    9 import java.util.Map;
    10 import java.util.function.Function;
    11 
    12 import org.openstreetmap.josm.tools.AlphanumComparator;
    135
    146/**
    15  * Comparators for comparing primitives.
     7 * Comparators for comparing {@link OsmPrimitive}.
     8 * @since 4113
    169 */
    1710public final class OsmPrimitiveComparator {
     
    2518     */
    2619    public static Comparator<OsmPrimitive> comparingNames() {
    27         final Comparator<String> digitsLast = comparing(str -> !str.isEmpty() && Character.isDigit(str.charAt(0)) ? 1 : 0);
    28         return comparing(memoize(DefaultNameFormatter.getInstance()::format),
    29                 digitsLast.thenComparing(AlphanumComparator.getInstance()));
     20        return PrimitiveComparator.doComparingNames();
    3021    }
    3122
     
    3627     */
    3728    public static Comparator<OsmPrimitive> comparingUniqueId() {
    38         return comparing(OsmPrimitive::getUniqueId);
     29        return PrimitiveComparator.doComparingUniqueId();
    3930    }
    4031
     
    4536     */
    4637    public static Comparator<OsmPrimitive> orderingNodesWaysRelations() {
    47         return comparingInt(osm -> osm.getType().ordinal());
     38        return PrimitiveComparator.doOrderingNodesWaysRelations();
    4839    }
    4940
     
    5445     */
    5546    public static Comparator<OsmPrimitive> orderingWaysRelationsNodes() {
    56         return comparingInt(osm -> {
    57             switch (osm.getType()) {
    58                 case WAY:
    59                     return 1;
    60                 case RELATION:
    61                     return 2;
    62                 case NODE:
    63                     return 3;
    64                 default:
    65                     throw new IllegalStateException();
    66             }
    67         });
     47        return PrimitiveComparator.doOrderingWaysRelationsNodes();
    6848    }
    6949
     
    7555     */
    7656    public static Comparator<OsmPrimitive> orderingRelationsWaysNodes() {
    77         return comparingInt(osm -> {
    78             switch (osm.getType()) {
    79                 case RELATION:
    80                     return 1;
    81                 case WAY:
    82                     return 2;
    83                 case NODE:
    84                     return 3;
    85                 default:
    86                     throw new IllegalStateException();
    87             }
    88         });
    89     }
    90 
    91     private static <T, R> Function<T, R> memoize(Function<T, R> base) {
    92         final Map<T, R> cache = new HashMap<>();
    93         return t -> cache.computeIfAbsent(t, base);
     57        return PrimitiveComparator.doOrderingRelationsWaysNodes();
    9458    }
    9559
Note: See TracChangeset for help on using the changeset viewer.