Ignore:
Timestamp:
2016-09-21T21:37:13+02:00 (8 years ago)
Author:
simon04
Message:

Use Relation.getMemberPrimitivesList where possible to avoid unnecessary set creation

File:
1 edited

Legend:

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

    r10728 r11038  
    1010import java.util.Map;
    1111import java.util.Set;
     12import java.util.stream.Collectors;
    1213
    1314import org.openstreetmap.josm.Main;
     
    7273    }
    7374
     75    /**
     76     * Returns the relation member at the specified index.
     77     * @param index the index of the relation member
     78     * @return relation member at the specified index
     79     */
    7480    public RelationMember getMember(int index) {
    7581        return members[index];
    7682    }
    7783
     84    /**
     85     * Adds the specified relation member at the last position.
     86     * @param member the member to add
     87     */
    7888    public void addMember(RelationMember member) {
    7989        boolean locked = writeLock();
     
    8898    }
    8999
     100    /**
     101     * Adds the specified relation member at the specified index.
     102     * @param member the member to add
     103     * @param index the index at which the specified element is to be inserted
     104     */
    90105    public void addMember(int index, RelationMember member) {
    91106        boolean locked = writeLock();
     
    383398     * @return the set of  {@link OsmPrimitive}s referred to by at least one
    384399     * member of this relation
     400     * @see #getMemberPrimitivesList()
    385401     */
    386402    public Set<OsmPrimitive> getMemberPrimitives() {
    387         Set<OsmPrimitive> ret = new HashSet<>();
    388         RelationMember[] members = this.members;
    389         for (RelationMember m: members) {
    390             if (m.getMember() != null) {
    391                 ret.add(m.getMember());
    392             }
    393         }
    394         return ret;
    395     }
    396 
     403        return getMembers().stream().map(RelationMember::getMember).collect(Collectors.toSet());
     404    }
     405
     406    /**
     407     * Returns the {@link OsmPrimitive}s of the specified type referred to by at least one member of this relation.
     408     * @param tClass the type of the primitive
     409     * @param <T> the type of the primitive
     410     * @return the primitives
     411     */
    397412    public <T extends OsmPrimitive> Collection<T> getMemberPrimitives(Class<T> tClass) {
    398         return Utils.filteredCollection(getMemberPrimitives(), tClass);
    399     }
    400 
     413        return Utils.filteredCollection(getMemberPrimitivesList(), tClass);
     414    }
     415
     416    /**
     417     * Returns an unmodifiable list of the {@link OsmPrimitive}s referred to by at least one member of this relation.
     418     * @return an unmodifiable list of the primitives
     419     */
    401420    public List<OsmPrimitive> getMemberPrimitivesList() {
    402421        return Utils.transform(getMembers(), RelationMember::getMember);
     
    549568    protected void keysChangedImpl(Map<String, String> originalKeys) {
    550569        super.keysChangedImpl(originalKeys);
    551         for (OsmPrimitive member : getMemberPrimitives()) {
     570        for (OsmPrimitive member : getMemberPrimitivesList()) {
    552571            member.clearCachedStyle();
    553572        }
Note: See TracChangeset for help on using the changeset viewer.