Changeset 17584 in josm


Ignore:
Timestamp:
2021-03-18T00:57:06+01:00 (4 years ago)
Author:
simon04
Message:

see #20613 - Introduce Tagged.keys()

Avoids creating a temporary HashMap just for iteration purposes

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java

    r16438 r17584  
    2727        Collection<String> discardableKeys = new HashSet<>(AbstractPrimitive.getDiscardableKeys());
    2828
    29         boolean needsChange = objectsToUpload.stream().flatMap(osm -> osm.keySet().stream())
     29        boolean needsChange = objectsToUpload.stream().flatMap(AbstractPrimitive::keys)
    3030                .anyMatch(discardableKeys::contains);
    3131
  • trunk/src/org/openstreetmap/josm/data/osm/AbstractPrimitive.java

    r16981 r17584  
    1919import java.util.concurrent.TimeUnit;
    2020import java.util.function.BiPredicate;
     21import java.util.stream.IntStream;
     22import java.util.stream.Stream;
    2123
    2224import org.openstreetmap.josm.data.gpx.GpxConstants;
     
    657659        }
    658660        return result;
     661    }
     662
     663    @Override
     664    public Stream<String> keys() {
     665        final String[] k = this.keys;
     666        if (k == null) {
     667            return Stream.empty();
     668        } else if (k.length == 1) {
     669            return Stream.of(k[0]);
     670        } else {
     671            return IntStream.range(0, k.length / 2).mapToObj(i -> k[i * 2]);
     672        }
    659673    }
    660674
  • trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java

    r16953 r17584  
    454454                return relation.getName();
    455455        } else if (":LocationCode".equals(nameTag)) {
    456             return relation.keySet().stream()
     456            return relation.keys()
    457457                    .filter(m -> m.endsWith(nameTag))
    458458                    .findFirst()
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r17456 r17584  
    55
    66import java.text.MessageFormat;
    7 import java.util.ArrayList;
    87import java.util.Arrays;
    98import java.util.Collection;
     
    570569        // 'area' is not really uninteresting (putting it in that list may have unpredictable side effects)
    571570        // but it's clearly not enough to consider an object as tagged (see #9261)
    572         updateFlagsNoLock(FLAG_TAGGED, keySet().stream()
     571        updateFlagsNoLock(FLAG_TAGGED, keys()
    573572                .anyMatch(key -> !isUninterestingKey(key) && !"area".equals(key)));
    574573    }
    575574
    576575    private void updateAnnotated() {
    577         updateFlagsNoLock(FLAG_ANNOTATED, keySet().stream()
    578                 .anyMatch(getWorkInProgressKeys()::contains));
     576        updateFlagsNoLock(FLAG_ANNOTATED, hasKeys() && getWorkInProgressKeys().stream().anyMatch(this::hasKey));
    579577    }
    580578
     
    10721070    @Override
    10731071    public Collection<String> getTemplateKeys() {
    1074         Collection<String> keySet = keySet();
    1075         List<String> result = new ArrayList<>(keySet.size() + 2);
    1076         result.add(SPECIAL_VALUE_ID);
    1077         result.add(SPECIAL_VALUE_LOCAL_NAME);
    1078         result.addAll(keySet);
    1079         return result;
     1072        return Stream.concat(Stream.of(SPECIAL_VALUE_ID, SPECIAL_VALUE_LOCAL_NAME), keys())
     1073                .collect(Collectors.toList());
    10801074    }
    10811075
  • trunk/src/org/openstreetmap/josm/data/osm/Tagged.java

    r15472 r17584  
    66import java.util.Map;
    77import java.util.Objects;
     8import java.util.stream.Stream;
    89
    910/**
     
    186187     *
    187188     * @return the set of keys
     189     * @see #keys()
    188190     */
    189191    Collection<String> keySet();
     192
     193    /**
     194     * Replies the keys as stream
     195     *
     196     * @return the keys as stream
     197     * @see #keySet()
     198     * @since 17584
     199     */
     200    default Stream<String> keys() {
     201        return keySet().stream();
     202    }
    190203
    191204    /**
  • trunk/src/org/openstreetmap/josm/data/osm/search/SearchCompiler.java

    r17344 r17584  
    739739                    // But since we're doing a regex match we'll have to loop over all the keys to see if they match our regex,
    740740                    // and only then try to match against the value
    741                     return osm.keySet().stream()
     741                    return osm.keys()
    742742                            .anyMatch(k -> keyPattern.matcher(k).find() && valuePattern.matcher(osm.get(k)).find());
    743743                }
     
    760760                mv = osm.get(key);
    761761                if (!caseSensitive && mv == null) {
    762                     mv = osm.keySet().stream().filter(key::equalsIgnoreCase).findFirst().map(osm::get).orElse(null);
     762                    mv = osm.keys().filter(key::equalsIgnoreCase).findFirst().map(osm::get).orElse(null);
    763763                }
    764764            }
     
    972972            case ANY_VALUE_REGEXP:
    973973            case EXACT_REGEXP:
    974                 return osm.keySet().stream().anyMatch(k -> keyPattern.matcher(k).matches()
     974                return osm.keys().anyMatch(k -> keyPattern.matcher(k).matches()
    975975                        && (mode == Mode.ANY_VALUE_REGEXP || valuePattern.matcher(osm.get(k)).matches()));
    976976            case MISSING_KEY_REGEXP:
    977                 return osm.keySet().stream().noneMatch(k -> keyPattern.matcher(k).matches());
     977                return osm.keys().noneMatch(k -> keyPattern.matcher(k).matches());
    978978            }
    979979            throw new AssertionError("Missed state");
  • trunk/src/org/openstreetmap/josm/data/validation/tests/Lanes.java

    r16198 r17584  
    4242    protected void checkNumberOfLanesByKey(final OsmPrimitive p, String lanesKey, String message) {
    4343        final Set<Integer> lanesCount =
    44                 p.keySet().stream()
     44                p.keys()
    4545                .filter(x -> x.endsWith(":" + lanesKey))
    4646                .filter(x -> !Arrays.asList(BLACKLIST).contains(x))
  • trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java

    r17501 r17584  
    690690
    691691    private void checkMultipolygonTags(OsmPrimitive p) {
    692         if (p.isAnnotated() || p.keySet().stream()
     692        if (p.isAnnotated() || p.keys()
    693693                .anyMatch(k -> k.matches("^(abandoned|construction|demolished|disused|planned|razed|removed|was).*")))
    694694            return;
  • trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java

    r17340 r17584  
    88import java.util.List;
    99import java.util.Set;
     10import java.util.stream.Collectors;
    1011import java.util.stream.IntStream;
     12import java.util.stream.Stream;
    1113
    1214import javax.swing.table.DefaultTableModel;
     
    101103    public void populate(OsmPrimitive my, OsmPrimitive their) {
    102104        tagMergeItems.clear();
    103         Set<String> keys = new HashSet<>();
    104         keys.addAll(my.keySet());
    105         keys.addAll(their.keySet());
     105        Set<String> keys = Stream.concat(my.keys(), their.keys()).collect(Collectors.toSet());
    106106        for (String key : keys) {
    107107            String myValue = my.get(key);
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r17440 r17584  
    832832
    833833    private static boolean containsOnlyGpxTags(Tagged t) {
    834         return t.getKeys().keySet().stream()
     834        return t.keys()
    835835                .allMatch(key -> GpxConstants.WPT_KEYS.contains(key) || key.startsWith(GpxConstants.GPX_PREFIX));
    836836    }
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java

    r16626 r17584  
    556556                    return e.osm.isKeyFalse(label) ^ negateResult;
    557557                case REGEX:
    558                     return e.osm.keySet().stream().anyMatch(containsPattern) ^ negateResult;
     558                    return e.osm.keys().anyMatch(containsPattern) ^ negateResult;
    559559                default:
    560560                    return e.osm.hasKey(label) ^ negateResult;
     
    580580            String key = label;
    581581            if (KeyMatchType.REGEX == matchType) {
    582                 key = p.keySet().stream().filter(containsPattern).findAny().orElse(key);
     582                key = p.keys().filter(containsPattern).findAny().orElse(key);
    583583            }
    584584            return new Tag(key, p.get(key));
  • trunk/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveKeyHandlingTest.java

    r17275 r17584  
    163163        assertEquals(expectedSize, p.getKeys().size());
    164164        assertEquals(expectedSize, p.keySet().size());
     165        assertEquals(expectedSize, p.keys().count());
    165166        assertEquals(expectedSize, p.getKeys().entrySet().size());
    166167        assertEquals(expectedSize, p.getKeys().keySet().size());
Note: See TracChangeset for help on using the changeset viewer.