Index: trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 16438)
@@ -14,4 +14,5 @@
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.swing.JOptionPane;
@@ -128,11 +129,5 @@
 
             for (Node n: nodes) {
-                boolean isInside = false;
-                for (Way w: ways) {
-                    if (w.getNodes().contains(n)) {
-                        isInside = true;
-                        break;
-                    }
-                }
+                boolean isInside = ways.stream().anyMatch(w -> w.getNodes().contains(n));
                 if (isInside)
                     inside.add(n);
@@ -252,12 +247,5 @@
      */
     private static List<Node> collectNodesWithExternReferers(List<Way> ways) {
-        List<Node> withReferrers = new ArrayList<>();
-        for (Way w: ways) {
-            for (Node n: w.getNodes()) {
-                if (n.getReferrers().size() > 1) {
-                    withReferrers.add(n);
-                }
-            }
-        }
+        List<Node> withReferrers = ways.stream().flatMap(w -> w.getNodes().stream()).filter(n -> n.getReferrers().size() > 1).collect(Collectors.toList());
         return withReferrers;
     }
@@ -316,11 +304,5 @@
      */
     private static boolean actionAllowed(Collection<Node> nodes) {
-        boolean outside = false;
-        for (Node n: nodes) {
-            if (n.isOutsideDownloadArea()) {
-                outside = true;
-                break;
-            }
-        }
+        boolean outside = nodes.stream().anyMatch(Node::isOutsideDownloadArea);
         if (outside)
             new Notification(
@@ -353,7 +335,6 @@
             for (Node node: way.getNodes()) {
                 if (way.isFirstLastNode(node)) continue;
-                for (Way wayOther: ways) {
-                    if (way == wayOther) continue;
-                    if (node.getReferrers().contains(wayOther)) return false;
+                if (ways.stream().filter(wayOther -> way != wayOther).anyMatch(wayOther -> node.getReferrers().contains(wayOther))) {
+                    return false;
                 }
             }
Index: trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 16438)
@@ -14,4 +14,6 @@
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.JOptionPane;
@@ -234,10 +236,9 @@
         // Choose nodes used as anchor points for projection.
         Node[] anchors = nodePairFurthestApart(nodes);
-        Collection<Command> cmds = new ArrayList<>(nodes.size());
         Line line = new Line(anchors[0], anchors[1]);
-        for (Node node: nodes) {
-            if (node != anchors[0] && node != anchors[1])
-                cmds.add(line.projectionCommand(node));
-        }
+        Collection<Command> cmds = nodes.stream()
+                .filter(node -> node != anchors[0] && node != anchors[1])
+                .map(line::projectionCommand)
+                .collect(Collectors.toList());
         return new SequenceCommand(tr("Align Nodes in Line"), cmds);
     }
@@ -312,8 +313,6 @@
                 // see #9081 comment 6
                 EastNorth c = node.getEastNorth();
-                double[] angle = new double[4];
-                for (int i = 0; i < 4; i++) {
-                    angle[i] = PolarCoor.computeAngle(neighbors.get(i).getEastNorth(), c);
-                }
+                double[] angle = IntStream.range(0, 4)
+                        .mapToDouble(i -> PolarCoor.computeAngle(neighbors.get(i).getEastNorth(), c)).toArray();
                 double[] deltaAngle = new double[3];
                 for (int i = 0; i < 3; i++) {
Index: trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 16438)
@@ -18,4 +18,5 @@
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.JOptionPane;
@@ -219,13 +220,8 @@
                 unreversedWays.add(w);
             } else {
-                boolean foundStartSegment = false;
                 int last = path.lastIndexOf(w.getNode(0));
 
-                for (int i = path.indexOf(w.getNode(0)); i <= last; i++) {
-                    if (path.get(i) == w.getNode(0) && i + 1 < path.size() && w.getNode(1) == path.get(i + 1)) {
-                        foundStartSegment = true;
-                        break;
-                    }
-                }
+                boolean foundStartSegment = IntStream.rangeClosed(path.indexOf(w.getNode(0)), last)
+                        .anyMatch(i -> path.get(i) == w.getNode(0) && i + 1 < path.size() && w.getNode(1) == path.get(i + 1));
                 if (foundStartSegment) {
                     unreversedWays.add(w);
Index: trunk/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/CopyCoordinatesAction.java	(revision 16438)
@@ -8,5 +8,9 @@
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
+import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
+import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -34,12 +38,11 @@
     @Override
     public void actionPerformed(ActionEvent ae) {
-        StringBuilder s = new StringBuilder();
-        for (Node n : getSelectedNodes()) {
-            s.append(n.lat());
-            s.append(", ");
-            s.append(n.lon());
-            s.append('\n');
-        }
-        ClipboardUtils.copyString(s.toString().trim());
+        ICoordinateFormat coordinateFormat = CoordinateFormatManager.getDefaultFormat();
+        String string = getSelectedNodes().stream()
+                .map(Node::getCoor)
+                .filter(Objects::nonNull)
+                .map(c -> coordinateFormat.toString(c, ", "))
+                .collect(Collectors.joining("\n"));
+        ClipboardUtils.copyString(string);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 16438)
@@ -248,11 +248,5 @@
      */
     private static List<Node> orderNodesByTrafficHand(List<Node> nodes) {
-        boolean rightHandTraffic = true;
-        for (Node n: nodes) {
-            if (!RightAndLefthandTraffic.isRightHandTraffic(n.getCoor())) {
-                rightHandTraffic = false;
-                break;
-            }
-        }
+        boolean rightHandTraffic = nodes.stream().allMatch(n -> RightAndLefthandTraffic.isRightHandTraffic(n.getCoor()));
         if (rightHandTraffic == Geometry.isClockwise(nodes)) {
             Collections.reverse(nodes);
Index: trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 16438)
@@ -20,4 +20,5 @@
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.stream.Collectors;
 
 import javax.swing.JOptionPane;
@@ -447,13 +448,7 @@
 
         for (Entry<String, String> entry : values.entrySet()) {
-            List<OsmPrimitive> affectedWays = new ArrayList<>();
             String key = entry.getKey();
             String value = entry.getValue();
-
-            for (Way way : innerWays) {
-                if (value.equals(way.get(key))) {
-                    affectedWays.add(way);
-                }
-            }
+            List<OsmPrimitive> affectedWays = innerWays.stream().filter(way -> value.equals(way.get(key))).collect(Collectors.toList());
 
             if (moveTags) {
Index: trunk/src/org/openstreetmap/josm/actions/DistributeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 16438)
@@ -115,10 +115,5 @@
                 return false;
             }
-            for (Node node: nodes) {
-                if (!w.containsNode(node)) {
-                    return false;
-                }
-            }
-            return true;
+            return nodes.stream().allMatch(w::containsNode);
         }
         return false;
Index: trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 16438)
@@ -14,4 +14,5 @@
 import java.util.ServiceConfigurationError;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 import javax.swing.filechooser.FileFilter;
@@ -248,10 +249,8 @@
     public static List<ExtensionFileFilter> getImportExtensionFileFilters() {
         updateAllFormatsImporter();
-        List<ExtensionFileFilter> filters = new LinkedList<>();
-        for (FileImporter importer : importers) {
-            filters.add(importer.filter);
-        }
-        sort(filters);
-        return filters;
+        return importers.stream()
+                .map(importer -> importer.filter)
+                .sorted()
+                .collect(Collectors.toList());
     }
 
@@ -326,10 +325,7 @@
     public static void applyChoosableImportFileFilters(
             AbstractFileChooser fileChooser, String extension, Predicate<ExtensionFileFilter> additionalTypes) {
-        for (ExtensionFileFilter filter: getImportExtensionFileFilters()) {
-
-            if (additionalTypes.test(filter) || filter.acceptName("file."+extension)) {
-                fileChooser.addChoosableFileFilter(filter);
-            }
-        }
+        getImportExtensionFileFilters().stream()
+                .filter(filter -> additionalTypes.test(filter) || filter.acceptName("file."+extension))
+                .forEach(fileChooser::addChoosableFileFilter);
         fileChooser.setFileFilter(getDefaultImportExtensionFileFilter(extension));
     }
Index: trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 16438)
@@ -368,14 +368,5 @@
     @Override
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
-        boolean ok = OsmUtils.isOsmCollectionEditable(selection);
-        if (ok) {
-            for (OsmPrimitive osm : selection) {
-                if (!(osm instanceof Node)) {
-                    ok = false;
-                    break;
-                }
-            }
-        }
-        setEnabled(ok);
+        setEnabled(OsmUtils.isOsmCollectionEditable(selection) && selection.stream().allMatch(osm -> osm instanceof Node));
     }
 }
Index: trunk/src/org/openstreetmap/josm/actions/MirrorAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 16438)
@@ -9,5 +9,4 @@
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.Set;
 
@@ -23,4 +22,5 @@
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.StreamUtils;
 
 /**
@@ -74,10 +74,7 @@
         double middle = (minEast + maxEast) / 2;
 
-        Collection<Command> cmds = new LinkedList<>();
-
-        for (Node n : nodes) {
-            cmds.add(new MoveCommand(n, 2 * (middle - n.getEastNorth().east()), 0.0));
-        }
-
+        Collection<Command> cmds = nodes.stream()
+                .map(n -> new MoveCommand(n, 2 * (middle - n.getEastNorth().east()), 0.0))
+                .collect(StreamUtils.toUnmodifiableList());
         UndoRedoHandler.getInstance().add(new SequenceCommand(tr("Mirror"), cmds));
     }
Index: trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 16438)
@@ -19,4 +19,5 @@
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.JOptionPane;
@@ -508,8 +509,6 @@
          */
         public void calcDirections(Direction pInitialDirection) throws InvalidUserInputException {
-            final EastNorth[] en = new EastNorth[nNode]; // alias: wayNodes.get(i).getEastNorth() ---> en[i]
-            for (int i = 0; i < nNode; i++) {
-                en[i] = wayNodes.get(i).getEastNorth();
-            }
+            // alias: wayNodes.get(i).getEastNorth() ---> en[i]
+            final EastNorth[] en = IntStream.range(0, nNode).mapToObj(i -> wayNodes.get(i).getEastNorth()).toArray(EastNorth[]::new);
             Direction direction = pInitialDirection;
             segDirections[0] = direction;
Index: trunk/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/SelectNonBranchingWaySequences.java	(revision 16438)
@@ -4,4 +4,5 @@
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeSet;
@@ -120,11 +121,9 @@
      */
     private Way findWay(Collection<OsmPrimitive> selection) {
-        for (Node node : outerNodes) {
-            Way way = findWay(selection, node);
-            if (way != null)
-                return way;
-        }
+        return outerNodes.stream()
+                .map(node -> findWay(selection, node))
+                .filter(Objects::nonNull)
+                .findFirst().orElse(null);
 
-        return null;
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 16438)
@@ -19,4 +19,5 @@
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.swing.BorderFactory;
@@ -108,12 +109,6 @@
         }
 
-        boolean zipRequired = false;
-        for (Layer l : layers) {
-            SessionLayerExporter ex = exporters.get(l);
-            if (ex != null && ex.requiresZip()) {
-                zipRequired = true;
-                break;
-            }
-        }
+        boolean zipRequired = layers.stream().map(l -> exporters.get(l))
+                .anyMatch(ex -> ex != null && ex.requiresZip());
 
         FileFilter joz = new ExtensionFileFilter("joz", "joz", tr("Session file (archive) (*.joz)"));
@@ -156,10 +151,8 @@
         }
 
-        List<Layer> layersOut = new ArrayList<>();
-        for (Layer layer : layers) {
-            if (exporters.get(layer) == null || !exporters.get(layer).shallExport()) continue;
-            // TODO: resolve dependencies for layers excluded by the user
-            layersOut.add(layer);
-        }
+        // TODO: resolve dependencies for layers excluded by the user
+        List<Layer> layersOut = layers.stream()
+                .filter(layer -> exporters.get(layer) != null && exporters.get(layer).shallExport())
+                .collect(Collectors.toList());
 
         int active = -1;
Index: trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 16438)
@@ -222,9 +222,7 @@
 
     private static List<String> paramCleanup(Collection<String> params) {
-        List<String> result = new ArrayList<>(params.size());
-        for (String param : params) {
-            result.add(paramCleanup(param));
-        }
-        return result;
+        return params.stream()
+                .map(ShowStatusReportAction::paramCleanup)
+                .collect(Collectors.toList());
     }
 
@@ -270,9 +268,6 @@
     private static void appendCollection(StringBuilder text, String label, Collection<String> col) {
         if (!col.isEmpty()) {
-            text.append(label).append(":\n");
-            for (String o : col) {
-                text.append(paramCleanup(o)).append('\n');
-            }
-            text.append('\n');
+            text.append(col.stream().map(o -> paramCleanup(o) + '\n')
+                    .collect(Collectors.joining("", label + ":\n", "\n")));
         }
     }
Index: trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java	(revision 16438)
@@ -16,4 +16,5 @@
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -49,4 +50,5 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.StreamUtils;
 
 /**
@@ -231,11 +233,8 @@
      */
     private static Set<Node> getMultiUseNodes(Way w) {
-        Set<Node> multipleUseNodes = new HashSet<>();
         Set<Node> allNodes = new HashSet<>();
-        for (Node n : w.getNodes()) {
-            if (!allNodes.add(n))
-                multipleUseNodes.add(n);
-        }
-        return multipleUseNodes;
+        return w.getNodes().stream()
+                .filter(n -> !allNodes.add(n))
+                .collect(Collectors.toSet());
     }
 
@@ -248,12 +247,8 @@
      */
     public static void simplifyWays(List<Way> ways, double threshold) {
-        Collection<Command> allCommands = new LinkedList<>();
-        for (Way way : ways) {
-            SequenceCommand simplifyCommand = createSimplifyCommand(way, threshold);
-            if (simplifyCommand == null) {
-                continue;
-            }
-            allCommands.add(simplifyCommand);
-        }
+        Collection<Command> allCommands = ways.stream()
+                .map(way -> createSimplifyCommand(way, threshold))
+                .filter(Objects::nonNull)
+                .collect(StreamUtils.toUnmodifiableList());
         if (allCommands.isEmpty())
             return;
Index: trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java	(revision 16438)
@@ -13,4 +13,5 @@
 import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.JOptionPane;
@@ -116,20 +117,13 @@
     private List<Node> cleanSelectedNodes(List<Way> selectedWays,
                                           List<Node> selectedNodes) {
-        List<Node> resultingNodes = new LinkedList<>();
 
         // List of node referenced by a route
-        for (Node n: selectedNodes) {
-            if (n.isReferredByWays(1)) {
-                resultingNodes.add(n);
-            }
-        }
+        List<Node> resultingNodes = selectedNodes.stream()
+                .filter(n -> n.isReferredByWays(1))
+                .collect(Collectors.toCollection(LinkedList::new));
         // If exactly one selected way, remove node not referencing par this way.
         if (selectedWays.size() == 1) {
             Way w = selectedWays.get(0);
-            for (Node n: new ArrayList<>(resultingNodes)) {
-                if (!w.containsNode(n)) {
-                    resultingNodes.remove(n);
-                }
-            }
+            resultingNodes.removeIf(n -> !w.containsNode(n));
         }
         // Warn if nodes were removed
Index: trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 16438)
@@ -8,10 +8,9 @@
 import java.awt.event.KeyEvent;
 import java.awt.geom.Area;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Future;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.actions.downloadtasks.DownloadTaskList;
-import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
@@ -58,8 +57,7 @@
             return;
 
-        List<Area> areas = new ArrayList<>();
-        for (DataSource ds : editLayer.data.getDataSources()) {
-            areas.add(new Area(ds.bounds.asRect()));
-        }
+        List<Area> areas = editLayer.data.getDataSources().stream()
+                .map(ds -> new Area(ds.bounds.asRect()))
+                .collect(Collectors.toList());
 
         // The next two blocks removes every intersection from every DataSource Area
@@ -78,11 +76,7 @@
         }
 
-        List<Area> areasToDownload = new ArrayList<>();
-        for (Area a : areas) {
-            if (a.isEmpty()) {
-                continue;
-            }
-            areasToDownload.add(a);
-        }
+        List<Area> areasToDownload = areas.stream()
+                .filter(a -> !a.isEmpty())
+                .collect(Collectors.toList());
 
         if (areasToDownload.isEmpty()) {
Index: trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 16438)
@@ -216,8 +216,5 @@
         //
         if (apiData != null) {
-            for (UploadHook hook : UPLOAD_HOOKS) {
-                if (!hook.checkUpload(apiData))
-                    return false;
-            }
+            return UPLOAD_HOOKS.stream().allMatch(hook -> hook.checkUpload(apiData));
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/corrector/ReverseWayTagCorrector.java	(revision 16438)
@@ -5,4 +5,5 @@
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
@@ -70,13 +71,8 @@
 
         static IStringSwitcher combined(IStringSwitcher... switchers) {
-            return key -> {
-                for (IStringSwitcher switcher : switchers) {
-                    final String newKey = switcher.apply(key);
-                    if (!key.equals(newKey)) {
-                        return newKey;
-                    }
-                }
-                return key;
-            };
+            return key -> Arrays.stream(switchers)
+                    .map(switcher -> switcher.apply(key))
+                    .filter(newKey -> !key.equals(newKey))
+                    .findFirst().orElse(key);
         }
     }
@@ -302,10 +298,6 @@
 
     private static boolean ignoreKeyForCorrection(String key) {
-        for (Pattern ignoredKey : IGNORED_KEYS) {
-            if (ignoredKey.matcher(key).matches()) {
-                return true;
-            }
-        }
-        return false;
+        return IGNORED_KEYS.stream()
+                .anyMatch(ignoredKey -> ignoredKey.matcher(key).matches());
     }
 }
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadGpsTask.java	(revision 16438)
@@ -179,17 +179,13 @@
             if (active instanceof GpxLayer && (merge || ((GpxLayer) active).data.fromServer))
                 return (GpxLayer) active;
-            for (GpxLayer l : MainApplication.getLayerManager().getLayersOfType(GpxLayer.class)) {
-                if (merge || l.data.fromServer)
-                    return l;
-            }
-            return null;
+            return MainApplication.getLayerManager().getLayersOfType(GpxLayer.class).stream()
+                    .filter(l -> merge || l.data.fromServer)
+                    .findFirst().orElse(null);
         }
 
         private MarkerLayer findMarkerMergeLayer(GpxLayer fromLayer) {
-            for (MarkerLayer l : MainApplication.getLayerManager().getLayersOfType(MarkerLayer.class)) {
-                if (fromLayer != null && l.fromLayer == fromLayer)
-                    return l;
-            }
-            return null;
+            return MainApplication.getLayerManager().getLayersOfType(MarkerLayer.class).stream()
+                    .filter(l -> fromLayer != null && l.fromLayer == fromLayer)
+                    .findFirst().orElse(null);
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java	(revision 16438)
@@ -16,4 +16,5 @@
 
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.osm.AbstractPrimitive;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -114,11 +115,8 @@
                 for (OsmPrimitive p : downloadedData.allNonDeletedPrimitives()) {
                     if (p.isIncomplete()) {
-                        Date timestamp = null;
-                        for (OsmPrimitive ref : p.getReferrers()) {
-                            if (!ref.isTimestampEmpty()) {
-                                timestamp = ref.getTimestamp();
-                                break;
-                            }
-                        }
+                        Date timestamp = p.getReferrers().stream()
+                                .filter(ref -> !ref.isTimestampEmpty())
+                                .map(AbstractPrimitive::getTimestamp)
+                                .findFirst().orElse(null);
                         toLoad.put(p, timestamp);
                     }
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadTaskList.java	(revision 16438)
@@ -151,10 +151,5 @@
      */
     protected void updatePotentiallyDeletedPrimitives(Set<OsmPrimitive> potentiallyDeleted) {
-        final List<OsmPrimitive> toSelect = new ArrayList<>();
-        for (OsmPrimitive primitive : potentiallyDeleted) {
-            if (primitive != null) {
-                toSelect.add(primitive);
-            }
-        }
+        final List<OsmPrimitive> toSelect = potentiallyDeleted.stream().filter(Objects::nonNull).collect(Collectors.toList());
         EventQueue.invokeLater(() -> UpdateSelectionAction.updatePrimitives(toSelect));
     }
@@ -279,11 +274,7 @@
             // FIXME: this is a hack. We assume that the user canceled the whole download if at
             // least one task was canceled or if it failed
-            //
-            for (DownloadTask task : tasks) {
-                if (task instanceof AbstractDownloadTask) {
-                    AbstractDownloadTask<?> absTask = (AbstractDownloadTask<?>) task;
-                    if (absTask.isCanceled() || absTask.isFailed())
-                        return;
-                }
+            if (Utils.filteredCollection(tasks, AbstractDownloadTask.class).stream()
+                    .anyMatch(absTask -> absTask.isCanceled() || absTask.isFailed())) {
+                return;
             }
             final DataSet editDataSet = MainApplication.getLayerManager().getEditDataSet();
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 16438)
@@ -604,10 +604,5 @@
                 // Don't allow creation of self-overlapping ways
                 if (way != null) {
-                    int nodeCount = 0;
-                    for (Node p : way.getNodes()) {
-                        if (p.equals(n0)) {
-                            nodeCount++;
-                        }
-                    }
+                    long nodeCount = way.getNodes().stream().filter(p -> p.equals(n0)).count();
                     if (nodeCount > 1) {
                         way = null;
@@ -1320,9 +1315,6 @@
         if (ds != null && !ds.getSelectedWays().isEmpty() && !wayIsFinished && !alt) {
             Way w = ds.getSelectedWays().iterator().next();
-            for (Node m : w.getNodes()) {
-                if (m.equals(mouseOnExistingNode) || mouseOnExistingWays.contains(w)) {
-                    rv.append(' ').append(tr("Finish drawing."));
-                    break;
-                }
+            if (w.getNodes().stream().anyMatch(m -> m.equals(mouseOnExistingNode) || mouseOnExistingWays.contains(w))) {
+                rv.append(' ').append(tr("Finish drawing."));
             }
         }
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 16438)
@@ -736,9 +736,6 @@
      */
     private static boolean hasNodeOtherWays(Node node, Way myWay) {
-        for (OsmPrimitive p : node.getReferrers()) {
-            if (p instanceof Way && p.isUsable() && p != myWay)
-                return true;
-        }
-        return false;
+        return node.getReferrers().stream()
+                .anyMatch(p -> p instanceof Way && p.isUsable() && p != myWay);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java	(revision 16438)
@@ -3,6 +3,6 @@
 
 import java.awt.Point;
-import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
 
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -42,16 +42,9 @@
 
         Node node = mv.getNearestNode(p, OsmPrimitive::isSelectable);
-        Way candidate = null;
 
         if (node != null) {
-            final Collection<OsmPrimitive> candidates = node.getReferrers();
-            for (OsmPrimitive refferer : candidates) {
-                if (refferer instanceof Way) {
-                    candidate = (Way) refferer;
-                    break;
-                }
-            }
-            if (candidate != null) {
-                return candidate;
+            Optional<Way> candidate = node.referrers(Way.class).findFirst();
+            if (candidate.isPresent()) {
+                return candidate.get();
             }
         }
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java	(revision 16438)
@@ -10,4 +10,5 @@
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.IntStream;
 
 import org.openstreetmap.josm.command.AddCommand;
@@ -93,11 +94,6 @@
         // Ugly method of ensuring that the offset isn't inverted. I'm sure there is a better and more elegant way
         Way refWay = ways.get(refWayIndex);
-        boolean refWayReversed = true;
-        for (int i = 0; i < sortedNodes.size() - 1; i++) {
-            if (sortedNodes.get(i) == refWay.firstNode() && sortedNodes.get(i + 1) == refWay.getNode(1)) {
-                refWayReversed = false;
-                break;
-            }
-        }
+        boolean refWayReversed = IntStream.range(0, sortedNodes.size() - 1)
+                .noneMatch(i -> sortedNodes.get(i) == refWay.firstNode() && sortedNodes.get(i + 1) == refWay.getNode(1));
         if (refWayReversed) {
             Collections.reverse(sortedNodes); // need to keep the orientation of the reference way.
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 16438)
@@ -772,12 +772,7 @@
 
     private static boolean doesImpactStatusLine(Collection<Node> affectedNodes, Collection<Way> selectedWays) {
-        for (Way w : selectedWays) {
-            for (Node n : w.getNodes()) {
-                if (affectedNodes.contains(n)) {
-                    return true;
-                }
-            }
-        }
-        return false;
+        return selectedWays.stream()
+                .flatMap(w -> w.getNodes().stream())
+                .anyMatch(affectedNodes::contains);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java	(revision 16438)
@@ -7,5 +7,5 @@
 import java.awt.event.ActionEvent;
 import java.util.Collection;
-import java.util.LinkedList;
+import java.util.Objects;
 
 import javax.swing.JOptionPane;
@@ -24,4 +24,5 @@
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.StreamUtils;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -41,11 +42,8 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        Collection<Command> cmds = new LinkedList<>();
-        for (Relation orig : Utils.filteredCollection(relations, Relation.class)) {
-            Command c = GenericRelationEditor.addPrimitivesToRelation(orig, MainApplication.getLayerManager().getActiveDataSet().getSelected());
-            if (c != null) {
-                cmds.add(c);
-            }
-        }
+        Collection<Command> cmds = Utils.filteredCollection(relations, Relation.class).stream()
+                .map(orig -> GenericRelationEditor.addPrimitivesToRelation(orig, MainApplication.getLayerManager().getActiveDataSet().getSelected()))
+                .filter(Objects::nonNull)
+                .collect(StreamUtils.toUnmodifiableList());
         if (!cmds.isEmpty()) {
             UndoRedoHandler.getInstance().add(new SequenceCommand(tr("Add selection to relation"), cmds));
Index: trunk/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java	(revision 16438)
@@ -75,10 +75,6 @@
         if (recentRelations == null || recentRelations.isEmpty())
             return null;
-        for (Relation relation: recentRelations) {
-            if (!isRelationListable(relation))
-                continue;
-            return relation;
-        }
-        return null;
+        return recentRelations.stream().filter(RecentRelationsAction::isRelationListable)
+                .findFirst().orElse(null);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 16438)
@@ -10,15 +10,13 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 import javax.swing.JOptionPane;
@@ -122,9 +120,9 @@
             searchHistory.removeLast();
         }
-        Set<String> savedHistory = new LinkedHashSet<>(searchHistory.size());
-        for (SearchSetting item: searchHistory) {
-            savedHistory.add(item.writeToString());
-        }
-        Config.getPref().putList("search.history", new ArrayList<>(savedHistory));
+        List<String> savedHistory = searchHistory.stream()
+                .map(SearchSetting::writeToString)
+                .distinct()
+                .collect(Collectors.toList());
+        Config.getPref().putList("search.history", savedHistory);
     }
 
@@ -134,9 +132,7 @@
      */
     public static List<String> getSearchExpressionHistory() {
-        List<String> ret = new ArrayList<>(getSearchHistory().size());
-        for (SearchSetting ss: getSearchHistory()) {
-            ret.add(ss.text);
-        }
-        return ret;
+        return getSearchHistory().stream()
+                .map(ss -> ss.text)
+                .collect(Collectors.toList());
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java	(revision 16438)
@@ -27,13 +27,6 @@
         Collection<String> discardableKeys = new HashSet<>(AbstractPrimitive.getDiscardableKeys());
 
-        boolean needsChange = false;
-        OUTER: for (OsmPrimitive osm : objectsToUpload) {
-            for (String key : osm.keySet()) {
-                if (discardableKeys.contains(key)) {
-                    needsChange = true;
-                    break OUTER;
-                }
-            }
-        }
+        boolean needsChange = objectsToUpload.stream().flatMap(osm -> osm.keySet().stream())
+                .anyMatch(discardableKeys::contains);
 
         if (needsChange) {
Index: trunk/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/actions/upload/UploadNotesTask.java	(revision 16438)
@@ -7,4 +7,5 @@
 import java.util.HashMap;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.swing.JOptionPane;
@@ -124,11 +125,9 @@
             noteData.updateNotes(updatedNotes);
             if (!failedNotes.isEmpty()) {
-                StringBuilder sb = new StringBuilder();
-                for (Map.Entry<Note, Exception> entry : failedNotes.entrySet()) {
-                    sb.append(tr("Note {0} failed: {1}", entry.getKey().getId(), entry.getValue().getMessage()))
-                      .append('\n');
-                }
-                Logging.error("Notes failed to upload: " + sb.toString());
-                JOptionPane.showMessageDialog(MainApplication.getMap(), sb.toString(),
+                String message = failedNotes.entrySet().stream()
+                        .map(entry -> tr("Note {0} failed: {1}", entry.getKey().getId(), entry.getValue().getMessage()))
+                        .collect(Collectors.joining("\n"));
+                Logging.error("Notes failed to upload: " + message);
+                JOptionPane.showMessageDialog(MainApplication.getMap(), message,
                         tr("Notes failed to upload"), JOptionPane.ERROR_MESSAGE);
                 ExceptionDialogUtil.explainException(failedNotes.values().iterator().next());
Index: trunk/src/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormat.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormat.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/data/coor/conversion/ICoordinateFormat.java	(revision 16438)
@@ -35,3 +35,13 @@
      */
     String lonToString(ILatLon ll);
+
+    /**
+     * Convert the coordinate to string: latitude + separator + longitude
+     * @param ll the coordinate
+     * @param separator the separator
+     * @return formatted coordinate
+     */
+    default String toString(ILatLon ll, String separator) {
+        return latToString(ll) + separator + lonToString(ll);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java	(revision 16438)
@@ -212,7 +212,7 @@
             }
             if (node.isLatLonKnown() && Config.getPref().getBoolean("osm-primitives.showcoor")) {
-                name.append(" \u200E(")
-                    .append(CoordinateFormatManager.getDefaultFormat().latToString(node)).append(", ")
-                    .append(CoordinateFormatManager.getDefaultFormat().lonToString(node)).append(')');
+                name.append(" \u200E(");
+                name.append(CoordinateFormatManager.getDefaultFormat().toString(node, ", "));
+                name.append(')');
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 16438)
@@ -1359,8 +1359,7 @@
             boolean condition = !networkErrors.isEmpty();
             if (condition) {
-                Set<String> errors = new TreeSet<>();
-                for (Throwable t : networkErrors.values()) {
-                    errors.add(t.toString());
-                }
+                Set<String> errors = networkErrors.values().stream()
+                        .map(Throwable::toString)
+                        .collect(Collectors.toCollection(TreeSet::new));
                 return handleNetworkOrProxyErrors(condition, tr("Network errors occurred"),
                         tr("JOSM tried to access the following resources:<br>" +
Index: trunk/src/org/openstreetmap/josm/gui/MainFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 16438)
@@ -14,6 +14,8 @@
 import java.awt.event.WindowEvent;
 import java.beans.PropertyChangeListener;
-import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.swing.ImageIcon;
@@ -83,6 +85,5 @@
         setJMenuBar(menu);
         geometry.applySafe(this);
-        List<Image> l = new LinkedList<>();
-        for (String file : new String[] {
+        List<Image> l = Stream.of(
                 /* ICON */ "logo_16x16x32",
                 /* ICON */ "logo_16x16x8",
@@ -91,10 +92,9 @@
                 /* ICON */ "logo_48x48x32",
                 /* ICON */ "logo_48x48x8",
-                /* ICON */ "logo"}) {
-            ImageIcon img = ImageProvider.getIfAvailable(file);
-            if (img != null) {
-                l.add(img.getImage());
-            }
-        }
+                /* ICON */ "logo")
+                .map(ImageProvider::getIfAvailable)
+                .filter(Objects::nonNull)
+                .map(ImageIcon::getImage)
+                .collect(Collectors.toList());
         setIconImages(l);
         addWindowListener(new ExitWindowAdapter());
Index: trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 16438)
@@ -14,4 +14,5 @@
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
@@ -720,5 +721,5 @@
      *
      */
-    public <T> T getToggleDialog(Class<T> type) {
+    public <T extends ToggleDialog> T getToggleDialog(Class<T> type) {
         return dialogsPanel.getToggleDialog(type);
     }
@@ -767,11 +768,7 @@
      */
     public <T> T getTopPanel(Class<T> type) {
-        int n = leftPanel.getComponentCount();
-        for (int i = 0; i < n; i++) {
-            Component c = leftPanel.getComponent(i);
-            if (type.isInstance(c))
-                return type.cast(c);
-        }
-        return null;
+        return Arrays.stream(leftPanel.getComponents())
+                .filter(type::isInstance)
+                .findFirst().map(type::cast).orElse(null);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 16438)
@@ -1110,8 +1110,5 @@
         int maxWays = Math.max(1, Config.getPref().getInt("selection.max-ways-for-statusline", 250));
         if (!ways.isEmpty() && ways.size() <= maxWays) {
-            dist = 0.0;
-            for (Way w : ways) {
-                dist += w.getLength();
-            }
+            dist = ways.stream().mapToDouble(Way::getLength).sum();
         }
         setDist(dist);
Index: trunk/src/org/openstreetmap/josm/gui/MenuScroller.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MenuScroller.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/MenuScroller.java	(revision 16438)
@@ -306,14 +306,8 @@
         if (menuItems != null && menuItems.length > 0) {
 
-            int allItemsHeight = 0;
-            for (Component item : menuItems) {
-                allItemsHeight += item.getPreferredSize().height;
-            }
-
+            int allItemsHeight = Arrays.stream(menuItems).mapToInt(item -> item.getPreferredSize().height).sum();
             int allowedHeight = WindowGeometry.getMaxDimensionOnScreen(menu).height - MainApplication.getMainFrame().getInsets().top;
-
-            boolean mustSCroll = allItemsHeight > allowedHeight;
-
-            if (mustSCroll) {
+            boolean mustScroll = allItemsHeight > allowedHeight;
+            if (mustScroll) {
                 firstIndex = Math.min(menuItems.length-1, Math.max(topFixedCount, firstIndex));
                 int scrollCount = computeScrollCount(firstIndex);
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 16438)
@@ -27,4 +27,5 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import java.util.zip.CRC32;
 
@@ -1138,9 +1139,6 @@
                 if (ntref == null && preferredRefs != null && Utils.equalsEpsilon(distSq, minDistSq)) {
                     List<OsmPrimitive> ndRefs = nd.getReferrers();
-                    for (OsmPrimitive ref: preferredRefs) {
-                        if (ndRefs.contains(ref)) {
-                            ntref = nd;
-                            break;
-                        }
+                    if (preferredRefs.stream().anyMatch(ndRefs::contains)) {
+                        ntref = nd;
                     }
                 }
@@ -1386,14 +1384,11 @@
     public final List<Way> getNearestWays(Point p,
             Collection<Way> ignore, Predicate<OsmPrimitive> predicate) {
-        List<Way> nearestList = new ArrayList<>();
         Set<Way> wset = new HashSet<>();
 
-        for (List<WaySegment> wss : getNearestWaySegmentsImpl(p, predicate).values()) {
-            for (WaySegment ws : wss) {
-                if (wset.add(ws.way)) {
-                    nearestList.add(ws.way);
-                }
-            }
-        }
+        List<Way> nearestList = getNearestWaySegmentsImpl(p, predicate).values().stream()
+                .flatMap(Collection::stream)
+                .filter(ws -> wset.add(ws.way))
+                .map(ws -> ws.way)
+                .collect(Collectors.toList());
         if (ignore != null) {
             nearestList.removeAll(ignore);
@@ -1599,31 +1594,22 @@
     public final List<OsmPrimitive> getAllNearest(Point p,
             Collection<OsmPrimitive> ignore, Predicate<OsmPrimitive> predicate) {
-        List<OsmPrimitive> nearestList = new ArrayList<>();
         Set<Way> wset = new HashSet<>();
 
         // add nearby ways
-        for (List<WaySegment> wss : getNearestWaySegmentsImpl(p, predicate).values()) {
-            for (WaySegment ws : wss) {
-                if (wset.add(ws.way)) {
-                    nearestList.add(ws.way);
-                }
-            }
-        }
+        List<OsmPrimitive> nearestList = getNearestWaySegmentsImpl(p, predicate).values().stream()
+                .flatMap(Collection::stream)
+                .filter(ws -> wset.add(ws.way))
+                .map(ws -> ws.way)
+                .collect(Collectors.toList());
 
         // add nearby nodes
-        for (List<Node> nlist : getNearestNodesImpl(p, predicate).values()) {
-            nearestList.addAll(nlist);
-        }
+        getNearestNodesImpl(p, predicate).values()
+                .forEach(nearestList::addAll);
 
         // add parent relations of nearby nodes and ways
-        Set<OsmPrimitive> parentRelations = new HashSet<>();
-        for (OsmPrimitive o : nearestList) {
-            for (OsmPrimitive r : o.getReferrers()) {
-                if (r instanceof Relation && predicate.test(r)) {
-                    parentRelations.add(r);
-                }
-            }
-        }
-        nearestList.addAll(parentRelations);
+        nearestList.stream()
+                .flatMap(o -> o.getReferrers().stream())
+                .filter(r -> r instanceof Relation && predicate.test(r))
+                .forEach(nearestList::add);
 
         if (ignore != null) {
Index: trunk/src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 16438)
@@ -395,18 +395,9 @@
                 }
                 if (alt) {
-                    for (Node n : w.getNodes()) {
-                        if (!n.isIncomplete() && selectionResult.contains(nc.getPoint2D(n))) {
-                            selection.add(w);
-                            break;
-                        }
+                    if (w.getNodes().stream().anyMatch(n -> !n.isIncomplete() && selectionResult.contains(nc.getPoint2D(n)))) {
+                        selection.add(w);
                     }
                 } else {
-                    boolean allIn = true;
-                    for (Node n : w.getNodes()) {
-                        if (!n.isIncomplete() && !selectionResult.contains(nc.getPoint(n))) {
-                            allIn = false;
-                            break;
-                        }
-                    }
+                    boolean allIn = w.getNodes().stream().allMatch(n -> n.isIncomplete() || selectionResult.contains(nc.getPoint(n)));
                     if (allIn) {
                         selection.add(w);
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ComparePairType.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ComparePairType.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ComparePairType.java	(revision 16438)
@@ -5,4 +5,6 @@
 import static org.openstreetmap.josm.gui.conflict.pair.ListRole.THEIR_ENTRIES;
 import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.util.Arrays;
 
 import org.openstreetmap.josm.tools.Utils;
@@ -54,8 +56,5 @@
      */
     public boolean isParticipatingIn(ListRole role) {
-        for (ListRole r: participatingRoles) {
-            if (r == role) return true;
-        }
-        return false;
+        return Arrays.stream(participatingRoles).anyMatch(r -> r == role);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java	(revision 16438)
@@ -8,4 +8,5 @@
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -108,10 +109,7 @@
         if (referrers.isEmpty())
             return tr("(none)");
-        StringBuilder str = new StringBuilder("<html>");
-        for (OsmPrimitive r: referrers) {
-            str.append(Utils.escapeReservedCharactersHTML(r.getDisplayName(DefaultNameFormatter.getInstance()))).append("<br>");
-        }
-        str.append("</html>");
-        return str.toString();
+        return referrers.stream()
+                .map(r -> Utils.escapeReservedCharactersHTML(r.getDisplayName(DefaultNameFormatter.getInstance())) + "<br>")
+                .collect(Collectors.joining("", "<html>", "</html>"));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java	(revision 16438)
@@ -8,4 +8,5 @@
 import java.util.List;
 import java.util.Set;
+import java.util.stream.IntStream;
 
 import javax.swing.table.DefaultTableModel;
@@ -85,12 +86,6 @@
      */
     protected void refreshNumUndecidedTags() {
-        int newValue = 0;
-        for (TagMergeItem item: tagMergeItems) {
-            if (MergeDecisionType.UNDECIDED == item.getMergeDecision()) {
-                newValue++;
-            }
-        }
         int oldValue = numUndecidedTags;
-        numUndecidedTags = newValue;
+        numUndecidedTags = getNumUnresolvedConflicts();
         fireNumUndecidedTagsChanged(oldValue, numUndecidedTags);
     }
@@ -194,9 +189,6 @@
 
     public boolean isResolvedCompletely() {
-        for (TagMergeItem item: tagMergeItems) {
-            if (item.getMergeDecision() == MergeDecisionType.UNDECIDED)
-                return false;
-        }
-        return true;
+        return tagMergeItems.stream()
+                .noneMatch(item -> item.getMergeDecision() == MergeDecisionType.UNDECIDED);
     }
 
@@ -209,20 +201,19 @@
 
     public int getNumResolvedConflicts() {
-        int n = 0;
-        for (TagMergeItem item: tagMergeItems) {
-            if (item.getMergeDecision() != MergeDecisionType.UNDECIDED) {
-                n++;
-            }
-        }
-        return n;
-
+        return (int) tagMergeItems.stream()
+                .filter(item -> item.getMergeDecision() != MergeDecisionType.UNDECIDED)
+                .count();
+    }
+
+    public int getNumUnresolvedConflicts() {
+        return (int) tagMergeItems.stream()
+                .filter(item -> item.getMergeDecision() == MergeDecisionType.UNDECIDED)
+                .count();
     }
 
     public int getFirstUndecided(int startIndex) {
-        for (int i = startIndex; i < tagMergeItems.size(); i++) {
-            if (tagMergeItems.get(i).getMergeDecision() == MergeDecisionType.UNDECIDED)
-                return i;
-        }
-        return -1;
+        return IntStream.range(startIndex, tagMergeItems.size())
+                .filter(i -> tagMergeItems.get(i).getMergeDecision() == MergeDecisionType.UNDECIDED)
+                .findFirst().orElse(-1);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java	(revision 16438)
@@ -6,4 +6,5 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -199,13 +200,5 @@
      */
     public boolean canSumAllNumeric() {
-        if (!canKeepAll()) {
-            return false;
-        }
-        for (String key : SUMMABLE_KEYS) {
-            if (getKey().matches(key)) {
-                return true;
-            }
-        }
-        return false;
+        return canKeepAll() && Arrays.stream(SUMMABLE_KEYS).anyMatch(key -> getKey().matches(key));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java	(revision 16438)
@@ -22,4 +22,6 @@
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.StringJoiner;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -251,10 +253,8 @@
         }
 
-        for (int i = 0; i < getNumResolverTabs(); i++) {
-            if (!getResolver(i).getModel().isResolvedCompletely()) {
-                tpResolvers.setSelectedIndex(i);
-                break;
-            }
-        }
+        IntStream.range(0, getNumResolverTabs())
+                .filter(i -> !getResolver(i).getModel().isResolvedCompletely())
+                .findFirst()
+                .ifPresent(tpResolvers::setSelectedIndex);
     }
 
@@ -421,5 +421,5 @@
                 setIcon(ImageProvider.get("data", "object"));
             }
-            StringBuilder text = new StringBuilder();
+            StringJoiner text = new StringJoiner(", ");
             for (Entry<OsmPrimitiveType, Integer> entry: stat.entrySet()) {
                 OsmPrimitiveType type = entry.getKey();
@@ -435,8 +435,5 @@
                 default: throw new AssertionError();
                 }
-                if (text.length() > 0) {
-                    text.append(", ");
-                }
-                text.append(msg);
+                text.add(msg);
             }
             setText(text.toString());
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java	(revision 16438)
@@ -13,6 +13,8 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.stream.Collectors;
 
 import javax.swing.table.DefaultTableModel;
@@ -70,12 +72,6 @@
      */
     protected void updateNumConflicts() {
-        int count = 0;
-        for (RelationMemberConflictDecision decision: decisions) {
-            if (!decision.isDecided()) {
-                count++;
-            }
-        }
         int oldValue = numConflicts;
-        numConflicts = count;
+        numConflicts = (int) decisions.stream().filter(decision -> !decision.isDecided()).count();
         if (numConflicts != oldValue) {
             support.firePropertyChange(getProperty(), oldValue, numConflicts);
@@ -235,8 +231,7 @@
     void prepareDefaultRelationDecisions(boolean fireEvent) {
         if (primitives.stream().allMatch(Node.class::isInstance)) {
-            final Collection<OsmPrimitive> primitivesInDecisions = new HashSet<>();
-            for (final RelationMemberConflictDecision i : decisions) {
-                primitivesInDecisions.add(i.getOriginalPrimitive());
-            }
+            final Collection<OsmPrimitive> primitivesInDecisions = decisions.stream()
+                    .map(RelationMemberConflictDecision::getOriginalPrimitive)
+                    .collect(Collectors.toSet());
             if (primitivesInDecisions.size() == 1) {
                 for (final RelationMemberConflictDecision i : decisions) {
@@ -264,8 +259,7 @@
                 // some primitives are not part of the relation, leave undecided
             } else {
-                final Collection<Iterator<RelationMemberConflictDecision>> iterators = new ArrayList<>(primitives.size());
-                for (final Collection<RelationMemberConflictDecision> i : decisionsByPrimitive.values()) {
-                    iterators.add(i.iterator());
-                }
+                final Collection<Iterator<RelationMemberConflictDecision>> iterators = decisionsByPrimitive.values().stream()
+                        .map(List::iterator)
+                        .collect(Collectors.toList());
                 while (iterators.stream().allMatch(Iterator::hasNext)) {
                     final List<RelationMemberConflictDecision> decisions = new ArrayList<>();
@@ -364,8 +358,7 @@
 
     protected RelationMemberConflictDecision getDecision(Relation relation, int pos) {
-        for (RelationMemberConflictDecision decision: decisions) {
-            if (decision.matches(relation, pos)) return decision;
-        }
-        return null;
+        return decisions.stream()
+                .filter(decision -> decision.matches(relation, pos))
+                .findFirst().orElse(null);
     }
 
@@ -408,12 +401,8 @@
      */
     public List<Command> buildResolutionCommands(OsmPrimitive newPrimitive) {
-        List<Command> command = new LinkedList<>();
-        for (Relation relation : relations) {
-            Command cmd = buildResolveCommand(relation, newPrimitive);
-            if (cmd != null) {
-                command.add(cmd);
-            }
-        }
-        return command;
+        return relations.stream()
+                .map(relation -> buildResolveCommand(relation, newPrimitive))
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
     }
 
@@ -449,11 +438,7 @@
      */
     public Set<Relation> getModifiedRelations(OsmPrimitive newPrimitive) {
-        Set<Relation> ret = new HashSet<>();
-        for (Relation relation: relations) {
-            if (isChanged(relation, newPrimitive)) {
-                ret.add(relation);
-            }
-        }
-        return ret;
+        return relations.stream()
+                .filter(relation -> isChanged(relation, newPrimitive))
+                .collect(Collectors.toSet());
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolutionUtil.java	(revision 16438)
@@ -106,10 +106,7 @@
         }
 
-        Collection<OsmPrimitive> taggedPrimitives = new ArrayList<>();
-        for (OsmPrimitive p: merged) {
-            if (p.isTagged()) {
-                taggedPrimitives.add(p);
-            }
-        }
+        Collection<OsmPrimitive> taggedPrimitives = merged.stream()
+                .filter(OsmPrimitive::isTagged)
+                .collect(Collectors.toList());
         if (taggedPrimitives.size() <= 1)
             return;
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java	(revision 16438)
@@ -95,11 +95,5 @@
             keys.retainAll(keysWithConflicts);
             if (showTagsWithMultiValuesOnly) {
-                Set<String> keysWithMultiValues = new HashSet<>();
-                for (String key: keys) {
-                    if (decisions.get(key).canKeepAll()) {
-                        keysWithMultiValues.add(key);
-                    }
-                }
-                keys.retainAll(keysWithMultiValues);
+                keys.removeIf(key -> !decisions.get(key).canKeepAll());
             }
             for (String key: tags.getKeys()) {
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/RelationMemberTransferable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/RelationMemberTransferable.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/RelationMemberTransferable.java	(revision 16438)
@@ -10,5 +10,4 @@
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.stream.Collectors;
 
@@ -95,8 +94,5 @@
 
     private PrimitiveTransferData getPrimitiveData() {
-        Collection<OsmPrimitive> primitives = new HashSet<>();
-        for (RelationMember member : members) {
-            primitives.add(member.getMember());
-        }
+        Collection<OsmPrimitive> primitives = members.stream().map(RelationMember::getMember).collect(Collectors.toSet());
         return PrimitiveTransferData.getData(primitives);
     }
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java	(revision 16438)
@@ -11,4 +11,6 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 import javax.swing.TransferHandler.TransferSupport;
@@ -126,11 +128,8 @@
 
     private static void updateNodes(Map<Long, Long> newNodeIds, PrimitiveData data) {
-        List<Long> newNodes = new ArrayList<>();
-        for (Long oldNodeId : ((WayData) data).getNodeIds()) {
-            Long newNodeId = newNodeIds.get(oldNodeId);
-            if (newNodeId != null) {
-                newNodes.add(newNodeId);
-            }
-        }
+        List<Long> newNodes = ((WayData) data).getNodeIds().stream()
+                .map(newNodeIds::get)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
         ((WayData) data).setNodeIds(newNodes);
     }
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveTagTransferPaster.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveTagTransferPaster.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveTagTransferPaster.java	(revision 16438)
@@ -27,4 +27,5 @@
 import org.openstreetmap.josm.gui.conflict.tags.PasteTagsConflictResolverDialog;
 import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTagTransferData;
+import org.openstreetmap.josm.tools.StreamUtils;
 
 /**
@@ -50,12 +51,9 @@
 
         TagPasteSupport tagPaster = new TagPasteSupport(data, selection);
-        List<Command> commands = new ArrayList<>();
-        for (Tag tag : tagPaster.execute()) {
-            Map<String, String> tags = Collections.singletonMap(tag.getKey(), "".equals(tag.getValue()) ? null : tag.getValue());
-            ChangePropertyCommand cmd = new ChangePropertyCommand(OsmDataManager.getInstance().getEditDataSet(), selection, tags);
-            if (cmd.getObjectsNumber() > 0) {
-                commands.add(cmd);
-            }
-        }
+        List<Command> commands = tagPaster.execute().stream()
+                .map(tag -> Collections.singletonMap(tag.getKey(), "".equals(tag.getValue()) ? null : tag.getValue()))
+                .map(tags -> new ChangePropertyCommand(OsmDataManager.getInstance().getEditDataSet(), selection, tags))
+                .filter(cmd -> cmd.getObjectsNumber() > 0)
+                .collect(StreamUtils.toUnmodifiableList());
         commitCommands(selection, commands);
         return true;
@@ -124,12 +122,8 @@
          */
         protected boolean canPasteFromHeterogeneousSourceWithoutConflict() {
-            for (OsmPrimitiveType type : OsmPrimitiveType.dataValues()) {
-                if (hasTargetPrimitives(type)) {
-                    TagCollection tc = data.getForPrimitives(type);
-                    if (!tc.isEmpty() && !tc.isApplicableToPrimitive())
-                        return false;
-                }
-            }
-            return true;
+            return OsmPrimitiveType.dataValues().stream()
+                    .filter(this::hasTargetPrimitives)
+                    .map(data::getForPrimitives)
+                    .allMatch(tc -> tc.isEmpty() || tc.isApplicableToPrimitive());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 16438)
@@ -21,4 +21,5 @@
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -441,8 +442,7 @@
         public synchronized int indexOf(OsmPrimitive my) {
             if (conflicts != null) {
-                for (int i = 0; i < conflicts.size(); i++) {
-                    if (conflicts.get(i).isMatchingMy(my))
-                        return i;
-                }
+                return IntStream.range(0, conflicts.size())
+                        .filter(i -> conflicts.get(i).isMatchingMy(my))
+                        .findFirst().orElse(-1);
             }
             return -1;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/DeleteFromRelationConfirmationDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/DeleteFromRelationConfirmationDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/DeleteFromRelationConfirmationDialog.java	(revision 16438)
@@ -16,7 +16,7 @@
 import java.util.Collection;
 import java.util.Comparator;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -231,9 +231,5 @@
          */
         public Set<OsmPrimitive> getObjectsToDelete() {
-            Set<OsmPrimitive> ret = new HashSet<>();
-            for (RelationToChildReference ref: data) {
-                ret.add(ref.getChild());
-            }
-            return ret;
+            return data.stream().map(RelationToChildReference::getChild).collect(Collectors.toSet());
         }
 
@@ -251,9 +247,5 @@
          */
         public Set<OsmPrimitive> getParentRelations() {
-            Set<OsmPrimitive> ret = new HashSet<>();
-            for (RelationToChildReference ref: data) {
-                ret.add(ref.getParent());
-            }
-            return ret;
+            return data.stream().map(RelationToChildReference::getParent).collect(Collectors.toSet());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java	(revision 16438)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
+import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -350,10 +351,7 @@
      *
      */
-    public <T> T getToggleDialog(Class<T> type) {
-        for (ToggleDialog td : allDialogs) {
-            if (type.isInstance(td))
-                return type.cast(td);
-        }
-        return null;
+    public <T extends ToggleDialog> T getToggleDialog(Class<T> type) {
+        return Utils.filteredCollection(allDialogs, type).stream()
+                .findFirst().orElse(null);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/FilterDialog.java	(revision 16438)
@@ -9,8 +9,8 @@
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -445,11 +445,7 @@
         @Override
         public List<MultikeyInfo> getMultikeyCombinations() {
-            List<MultikeyInfo> result = new ArrayList<>();
-
-            for (int i = 0; i < filterModel.getRowCount(); i++) {
-                result.add(new MultikeyInfo(i, filterModel.getValue(i).text));
-            }
-
-            return result;
+            return IntStream.range(0, filterModel.getRowCount())
+                    .mapToObj(i -> new MultikeyInfo(i, filterModel.getValue(i).text))
+                    .collect(Collectors.toList());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 16438)
@@ -23,4 +23,6 @@
 import java.util.Locale;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -870,12 +872,9 @@
          */
         public List<Layer> getSelectedLayers() {
-            List<Layer> selected = new ArrayList<>();
             List<Layer> layers = getLayers();
-            for (int i = 0; i < layers.size(); i++) {
-                if (selectionModel.isSelectedIndex(i)) {
-                    selected.add(layers.get(i));
-                }
-            }
-            return selected;
+            return IntStream.range(0, layers.size())
+                    .filter(selectionModel::isSelectedIndex)
+                    .mapToObj(layers::get)
+                    .collect(Collectors.toList());
         }
 
@@ -1019,17 +1018,10 @@
          */
         public List<Layer> getPossibleMergeTargets(Layer source) {
-            List<Layer> targets = new ArrayList<>();
             if (source == null) {
-                return targets;
-            }
-            for (Layer target : getLayers()) {
-                if (source == target) {
-                    continue;
-                }
-                if (target.isMergable(source) && source.isMergable(target)) {
-                    targets.add(target);
-                }
-            }
-            return targets;
+                return new ArrayList<>();
+            }
+            return getLayers().stream()
+                    .filter(target -> source != target && target.isMergable(source) && source.isMergable(target))
+                    .collect(Collectors.toList());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 16438)
@@ -402,11 +402,5 @@
                 return false;
             int[] pos = tblStyles.getSelectedRows();
-            if (pos.length == 0)
-                return false;
-            for (int i : pos) {
-                if (!model.getRow(i).isLocal())
-                    return false;
-            }
-            return true;
+            return pos.length > 0 && Arrays.stream(pos).allMatch(i -> model.getRow(i).isLocal());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 16438)
@@ -14,7 +14,8 @@
 import java.util.Collections;
 import java.util.EnumSet;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -503,12 +504,7 @@
             if (removedPrimitives == null) return;
             // extract the removed relations
-            //
-            Set<Relation> removedRelations = new HashSet<>();
-            for (OsmPrimitive p: removedPrimitives) {
-                if (!(p instanceof Relation)) {
-                    continue;
-                }
-                removedRelations.add((Relation) p);
-            }
+            Set<Relation> removedRelations = removedPrimitives.stream()
+                    .filter(p -> p instanceof Relation).map(p -> (Relation) p)
+                    .collect(Collectors.toSet());
             if (removedRelations.isEmpty())
                 return;
@@ -570,12 +566,8 @@
          */
         public List<IRelation<?>> getSelectedRelations() {
-            List<IRelation<?>> ret = new ArrayList<>();
-            for (int i = 0; i < getSize(); i++) {
-                if (!selectionModel.isSelectedIndex(i)) {
-                    continue;
-                }
-                ret.add(getVisibleRelation(i));
-            }
-            return ret;
+            return IntStream.range(0, getSize())
+                    .filter(selectionModel::isSelectedIndex)
+                    .mapToObj(this::getVisibleRelation)
+                    .collect(Collectors.toList());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 16438)
@@ -18,8 +18,8 @@
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -523,10 +523,8 @@
             if (history.getFirst().equals(selection)) return;
             history.addFirst(selection);
-            for (int i = 1; i < history.size(); ++i) {
-                if (history.get(i).equals(selection)) {
-                    history.remove(i);
-                    break;
-                }
-            }
+            IntStream.range(1, history.size())
+                    .filter(i -> history.get(i).equals(selection))
+                    .findFirst()
+                    .ifPresent(i -> history.remove(i));
             int maxsize = Config.getPref().getInt("select.history-size", SELECTION_HISTORY_SIZE);
             while (history.size() > maxsize) {
@@ -569,11 +567,8 @@
          */
         public synchronized Collection<OsmPrimitive> getSelected() {
-            Set<OsmPrimitive> sel = new HashSet<>();
-            for (int i = 0; i < getSize(); i++) {
-                if (selectionModel.isSelectedIndex(i)) {
-                    sel.add(selection.get(i));
-                }
-            }
-            return sel;
+            return IntStream.range(0, getSize())
+                    .filter(selectionModel::isSelectedIndex)
+                    .mapToObj(selection::get)
+                    .collect(Collectors.toSet());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 16438)
@@ -15,7 +15,5 @@
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -163,5 +161,5 @@
     private List<User> getSelectedUsers() {
         int[] rows = userTable.getSelectedRows();
-        return rows.length == 0 ? Collections.emptyList() : model.getSelectedUsers(rows);
+        return model.getSelectedUsers(rows);
     }
 
@@ -361,30 +359,22 @@
 
         public void selectPrimitivesOwnedBy(int... rows) {
-            Set<User> users = new HashSet<>();
-            for (int index: rows) {
-                users.add(data.get(index).user);
-            }
+            Set<User> users = Arrays.stream(rows)
+                    .mapToObj(index -> data.get(index).user)
+                    .collect(Collectors.toSet());
             OsmData<?, ?, ?, ?> ds = MainApplication.getLayerManager().getActiveData();
             Collection<? extends IPrimitive> selected = ds.getAllSelected();
-            Collection<IPrimitive> byUser = new LinkedList<>();
-            for (IPrimitive p : selected) {
-                if (users.contains(p.getUser())) {
-                    byUser.add(p);
-                }
-            }
+            Collection<IPrimitive> byUser = selected.stream()
+                    .filter(p -> users.contains(p.getUser()))
+                    .collect(Collectors.toList());
             ds.setSelected(byUser);
         }
 
         public List<User> getSelectedUsers(int... rows) {
-            List<User> ret = new LinkedList<>();
             if (rows == null || rows.length == 0)
-                return ret;
-            for (int row: rows) {
-                if (data.get(row).user == null) {
-                    continue;
-                }
-                ret.add(data.get(row).user);
-            }
-            return ret;
+                return Collections.emptyList();
+            return Arrays.stream(rows)
+                    .filter(row -> data.get(row).user != null)
+                    .mapToObj(row -> data.get(row).user)
+                    .collect(Collectors.toList());
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 16438)
@@ -237,17 +237,12 @@
 
         void updateEnabledState() {
-            boolean found = false;
             final DataSet ds = MainApplication.getLayerManager().getActiveDataSet();
-            if (ds != null && !ds.selectionEmpty()) {
-                for (TestError e : tree.getErrors()) {
-                    for (OsmPrimitive p : e.getPrimitives()) {
-                        if (p.isSelected()) {
-                            found = true;
-                            break;
-                        }
-                    }
-                }
-            }
-            setEnabled(found);
+            if (ds == null || ds.selectionEmpty()) {
+                setEnabled(false);
+            } else {
+                boolean found = tree.getErrors().stream()
+                        .anyMatch(e -> e.getPrimitives().stream().anyMatch(OsmPrimitive::isSelected));
+                setEnabled(found);
+            }
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerListTransferHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerListTransferHandler.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerListTransferHandler.java	(revision 16438)
@@ -10,4 +10,5 @@
 import java.util.Collection;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.JComponent;
@@ -47,10 +48,5 @@
 
     private static boolean onlyDataLayersSelected(LayerListModel tableModel) {
-        for (Layer l : tableModel.getSelectedLayers()) {
-            if (!(l instanceof OsmDataLayer)) {
-                return false;
-            }
-        }
-        return true;
+        return tableModel.getSelectedLayers().stream().allMatch(l -> l instanceof OsmDataLayer);
     }
 
@@ -159,9 +155,5 @@
 
     private static List<String> getNames(List<Layer> namesToAvoid) {
-        List<String> layerNames = new ArrayList<>();
-        for (Layer l: namesToAvoid) {
-            layerNames.add(l.getName());
-        }
-        return layerNames;
+        return namesToAvoid.stream().map(Layer::getName).collect(Collectors.toList());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java	(revision 16438)
@@ -399,8 +399,7 @@
         @Override
         protected void updateSliderWhileEnabled(Collection<? extends Layer> usedLayers, boolean allHidden) {
-            double opacity = 0;
-            for (Layer l : usedLayers) {
-                opacity += l.getOpacity();
-            }
+            double opacity = usedLayers.stream()
+                    .mapToDouble(Layer::getOpacity)
+                    .sum();
             opacity /= usedLayers.size();
             if (opacity == 0) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/CopyAllKeyValueAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/CopyAllKeyValueAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/CopyAllKeyValueAction.java	(revision 16438)
@@ -6,9 +6,7 @@
 import java.awt.event.KeyEvent;
 import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map.Entry;
 import java.util.function.IntFunction;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
 
 import javax.swing.JTable;
@@ -42,9 +40,7 @@
     @Override
     protected Collection<String> getString(Tagged p, String key) {
-        List<String> r = new LinkedList<>();
-        for (Entry<String, String> kv : p.getKeys().entrySet()) {
-            r.add(new Tag(kv.getKey(), kv.getValue()).toString());
-        }
-        return r;
+        return p.getKeys().entrySet().stream()
+                .map(kv -> new Tag(kv.getKey(), kv.getValue()).toString())
+                .collect(Collectors.toList());
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 16438)
@@ -411,8 +411,5 @@
             protected int checkTableSelection(JTable table, Point p) {
                 int row = super.checkTableSelection(table, p);
-                List<IRelation<?>> rels = new ArrayList<>();
-                for (int i: table.getSelectedRows()) {
-                    rels.add((IRelation<?>) table.getValueAt(i, 0));
-                }
+                List<IRelation<?>> rels = Arrays.stream(table.getSelectedRows()).mapToObj(i -> (IRelation<?>) table.getValueAt(i, 0)).collect(Collectors.toList());
                 membershipMenuHandler.setPrimitives(rels);
                 return row;
@@ -546,10 +543,8 @@
         OsmDataLayer layer = MainApplication.getLayerManager().getActiveDataLayer();
         if (!layer.isLocked()) {
-            List<RelationMember> members = new ArrayList<>();
-            for (IRelationMember<?> rm : ((MemberInfo) membershipData.getValueAt(row, 1)).role) {
-                if (rm instanceof RelationMember) {
-                    members.add((RelationMember) rm);
-                }
-            }
+            List<RelationMember> members = ((MemberInfo) membershipData.getValueAt(row, 1)).role.stream()
+                    .filter(rm -> rm instanceof RelationMember)
+                    .map(rm -> (RelationMember) rm)
+                    .collect(Collectors.toList());
             RelationEditor.getEditor(layer, relation, members).setVisible(true);
         }
@@ -660,8 +655,5 @@
         }
         for (Entry<String, Map<String, Integer>> e : valueCount.entrySet()) {
-            int count = 0;
-            for (Entry<String, Integer> e1 : e.getValue().entrySet()) {
-                count += e1.getValue();
-            }
+            int count = e.getValue().values().stream().mapToInt(i -> i).sum();
             if (count < newSelSize) {
                 e.getValue().put("", newSelSize - count);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 16438)
@@ -27,7 +27,7 @@
 import java.util.Collections;
 import java.util.EnumSet;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -931,12 +931,8 @@
 
     protected static Set<String> findSuggestedRoles(final Collection<TaggingPreset> presets, OsmPrimitive p) {
-        final Set<String> roles = new HashSet<>();
-        for (TaggingPreset preset : presets) {
-            String role = preset.suggestRoleForOsmPrimitive(p);
-            if (role != null && !role.isEmpty()) {
-                roles.add(role);
-            }
-        }
-        return roles;
+        return presets.stream()
+                .map(preset -> preset.suggestRoleForOsmPrimitive(p))
+                .filter(role -> role != null && !role.isEmpty())
+                .collect(Collectors.toSet());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java	(revision 16438)
@@ -9,6 +9,6 @@
 import java.util.Collection;
 import java.util.EnumSet;
-import java.util.HashSet;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -116,10 +116,8 @@
         if (MainApplication.isDisplayingMapView()) {
             Collection<RelationMember> sel = getMemberTableModel().getSelectedMembers();
-            final Set<OsmPrimitive> toHighlight = new HashSet<>();
-            for (RelationMember r: sel) {
-                if (r.getMember().isUsable()) {
-                    toHighlight.add(r.getMember());
-                }
-            }
+            final Set<OsmPrimitive> toHighlight = sel.stream()
+                    .filter(r -> r.getMember().isUsable())
+                    .map(RelationMember::getMember)
+                    .collect(Collectors.toSet());
             SwingUtilities.invokeLater(() -> {
                 if (MainApplication.isDisplayingMapView() && highlightHelper.highlightOnly(toHighlight)) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 16438)
@@ -3,4 +3,5 @@
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.BitSet;
 import java.util.Collection;
@@ -9,4 +10,5 @@
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeSet;
@@ -372,11 +374,8 @@
      */
     public boolean hasSameMembersAs(Relation relation) {
-        if (relation == null || relation.getMembersCount() != members.size())
-            return false;
-        for (int i = 0; i < relation.getMembersCount(); i++) {
-            if (!relation.getMember(i).equals(members.get(i)))
-                return false;
-        }
-        return true;
+        return relation != null
+                && relation.getMembersCount() == members.size()
+                && IntStream.range(0, relation.getMembersCount())
+                .allMatch(i -> relation.getMember(i).equals(members.get(i)));
     }
 
@@ -435,11 +434,8 @@
                 EnumSet.of(relation != null ? TaggingPresetType.forPrimitive(relation) : TaggingPresetType.RELATION),
                 presetHandler.getSelection().iterator().next().getKeys(), false);
-        Collection<String> potentialRoles = new TreeSet<>();
-        for (TaggingPreset tp : presets) {
-            String suggestedRole = tp.suggestRoleForOsmPrimitive(primitive);
-            if (suggestedRole != null) {
-                potentialRoles.add(suggestedRole);
-            }
-        }
+        Collection<String> potentialRoles = presets.stream()
+                .map(tp -> tp.suggestRoleForOsmPrimitive(primitive))
+                .filter(Objects::nonNull)
+                .collect(Collectors.toCollection(TreeSet::new));
         // TODO: propose user to choose role among potential ones instead of picking first one
         final String role = potentialRoles.isEmpty() ? "" : potentialRoles.iterator().next();
@@ -515,39 +511,32 @@
      */
     public Collection<RelationMember> getSelectedMembers() {
-        List<RelationMember> selectedMembers = new ArrayList<>();
-        for (int i : getSelectedIndices()) {
-            selectedMembers.add(members.get(i));
-        }
-        return selectedMembers;
-    }
-
-    /**
-     * Replies the set of selected referers. Never null, but may be empty.
-     *
-     * @return the set of selected referers
+        return Arrays.stream(getSelectedIndices())
+                .mapToObj(members::get)
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * Replies the set of selected referrers. Never null, but may be empty.
+     *
+     * @return the set of selected referrers
      */
     public Collection<OsmPrimitive> getSelectedChildPrimitives() {
-        Collection<OsmPrimitive> ret = new ArrayList<>();
-        for (RelationMember m: getSelectedMembers()) {
-            ret.add(m.getMember());
-        }
-        return ret;
-    }
-
-    /**
-     * Replies the set of selected referers. Never null, but may be empty.
+        return getSelectedMembers().stream()
+                .map(RelationMember::getMember)
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * Replies the set of selected referrers. Never null, but may be empty.
      * @param referenceSet reference set
      *
-     * @return the set of selected referers
+     * @return the set of selected referrers
      */
     public Set<OsmPrimitive> getChildPrimitives(Collection<? extends OsmPrimitive> referenceSet) {
-        Set<OsmPrimitive> ret = new HashSet<>();
         if (referenceSet == null) return null;
-        for (RelationMember m: members) {
-            if (referenceSet.contains(m.getMember())) {
-                ret.add(m.getMember());
-            }
-        }
-        return ret;
+        return members.stream()
+                .filter(m -> referenceSet.contains(m.getMember()))
+                .map(RelationMember::getMember)
+                .collect(Collectors.toSet());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTransferHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTransferHandler.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTransferHandler.java	(revision 16438)
@@ -7,6 +7,7 @@
 import java.awt.datatransfer.UnsupportedFlavorException;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 import javax.swing.JComponent;
@@ -122,11 +123,8 @@
     protected <T extends PrimitiveId> void importData(MemberTable destination, int insertRow,
                                   Collection<T> memberData, AbstractRelationMemberConverter<T> toMemberFunction) {
-        final Collection<RelationMember> membersToAdd = new ArrayList<>(memberData.size());
-        for (T data : memberData) {
-            final RelationMember member = toMemberFunction.importPrimitive(destination, data);
-            if (member != null) {
-                membersToAdd.add(member);
-            }
-        }
+        final Collection<RelationMember> membersToAdd = memberData.stream()
+                .map(data -> toMemberFunction.importPrimitive(destination, data))
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
         destination.getMemberTableModel().addMembersAtIndexKeepingOldSelection(membersToAdd, insertRow);
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 16438)
@@ -4,4 +4,5 @@
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 import javax.swing.AbstractListModel;
@@ -57,12 +58,8 @@
 
     protected boolean isReferringRelation(Relation parent) {
-        if (parent == null) return false;
-        for (RelationMember m: parent.getMembers()) {
-            if (m.isRelation()) {
-                Relation child = m.getRelation();
-                if (child.equals(relation)) return true;
-            }
-        }
-        return false;
+        return parent != null && parent.getMembers().stream()
+                .filter(RelationMember::isRelation)
+                .map(RelationMember::getRelation)
+                .anyMatch(child -> Objects.equals(child, relation));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java	(revision 16438)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui.dialogs.relation;
 
+import java.awt.Component;
 import java.awt.Point;
 import java.awt.Window;
@@ -217,14 +218,8 @@
      */
     protected boolean hasEditorWithCloseUpperLeftCorner(Point p, RelationEditor thisEditor) {
-        for (RelationEditor editor: openDialogs.values()) {
-            if (editor == thisEditor) {
-                continue;
-            }
-            Point corner = editor.getLocation();
-            if (p.x >= corner.x -5 && corner.x + 5 >= p.x
-                    && p.y >= corner.y -5 && corner.y + 5 >= p.y)
-                return true;
-        }
-        return false;
+        return openDialogs.values().stream()
+                .filter(editor -> editor != thisEditor)
+                .map(Component::getLocation)
+                .anyMatch(corner -> p.x >= corner.x - 5 && corner.x + 5 >= p.x && p.y >= corner.y - 5 && corner.y + 5 >= p.y);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java	(revision 16438)
@@ -46,11 +46,5 @@
     protected int getNumRelationChildren(Relation parent) {
         if (parent == null) return 0;
-        int count = 0;
-        for (RelationMember member : parent.getMembers()) {
-            if (member.isRelation()) {
-                count++;
-            }
-        }
-        return count;
+        return (int) parent.getMembers().stream().filter(RelationMember::isRelation).count();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/EditAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/EditAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/EditAction.java	(revision 16438)
@@ -6,5 +6,5 @@
 import java.awt.event.ActionEvent;
 import java.util.Collection;
-import java.util.HashSet;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -40,12 +40,8 @@
 
     protected Collection<RelationMember> getMembersForCurrentSelection(Relation r) {
-        Collection<RelationMember> members = new HashSet<>();
         Collection<OsmPrimitive> selection = getLayer().data.getSelected();
-        for (RelationMember member: r.getMembers()) {
-            if (selection.contains(member.getMember())) {
-                members.add(member);
-            }
-        }
-        return members;
+        return r.getMembers().stream()
+                .filter(member -> selection.contains(member.getMember()))
+                .collect(Collectors.toSet());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java	(revision 16438)
@@ -5,6 +5,6 @@
 
 import java.awt.Component;
-import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.JOptionPane;
@@ -51,10 +51,7 @@
         tagEditorModel.applyToPrimitive(newRelation);
         getMemberTableModel().applyToRelation(newRelation);
-        List<RelationMember> newMembers = new ArrayList<>();
-        for (RelationMember rm: newRelation.getMembers()) {
-            if (!rm.getMember().isDeleted()) {
-                newMembers.add(rm);
-            }
-        }
+        List<RelationMember> newMembers = newRelation.getMembers().stream()
+                .filter(rm -> !rm.getMember().isDeleted())
+                .collect(Collectors.toList());
         if (newRelation.getMembersCount() != newMembers.size()) {
             newRelation.setMembers(newMembers);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java	(revision 16438)
@@ -12,4 +12,5 @@
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -110,13 +111,11 @@
         public List<RelationMember> sortMembers(List<RelationMember> list) {
             final Map<String, RelationMember> platformByName = new HashMap<>();
-            for (RelationMember i : list) {
-                if (i.getRole().startsWith("platform")) {
-                    final RelationMember old = platformByName.put(getStopName(i.getMember()), i);
-                    if (old != null) {
-                        // Platform with same name present. Stop to avoid damaging complicated relations.
-                        // This case can happily be handled differently.
-                        return list;
-                    }
-                }
+            if (list.stream()
+                    .filter(i -> i.getRole().startsWith("platform"))
+                    .map(i -> platformByName.put(getStopName(i.getMember()), i))
+                    .anyMatch(Objects::nonNull)) {
+                // Platform with same name present. Stop to avoid damaging complicated relations.
+                // This case can happily be handled differently.
+                return list;
             }
             final List<RelationMember> sorted = new ArrayList<>(list.size());
@@ -199,5 +198,5 @@
     public static List<RelationMember> sortMembersByConnectivity(List<RelationMember> defaultMembers) {
 
-        List<RelationMember> newMembers = new ArrayList<>();
+        List<RelationMember> newMembers;
 
         RelationNodeMap map = new RelationNodeMap(defaultMembers);
@@ -232,9 +231,5 @@
         }
 
-        for (List<Integer> tmpGroup : allGroups) {
-            for (Integer p : tmpGroup) {
-                newMembers.add(defaultMembers.get(p));
-            }
-        }
+        newMembers = allGroups.stream().flatMap(Collection::stream).map(defaultMembers::get).collect(Collectors.toList());
 
         // Finally, add members that have not been sorted at all
Index: trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/history/DiffTableModel.java	(revision 16438)
@@ -4,4 +4,5 @@
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.IntStream;
 
 import javax.swing.table.AbstractTableModel;
@@ -43,9 +44,7 @@
 
     public int getFirstChange() {
-        for (int i = 0; i < rows.size(); i++) {
-            if (rows.get(i).state != DiffItemType.SAME)
-                return i;
-        }
-        return -1;
+        return IntStream.range(0, rows.size())
+                .filter(i -> rows.get(i).state != DiffItemType.SAME)
+                .findFirst().orElse(-1);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 16438)
@@ -110,11 +110,7 @@
 
     private boolean hasDialogWithCloseUpperLeftCorner(Point p) {
-        for (HistoryBrowserDialog dialog: dialogs.values()) {
-            Point corner = dialog.getLocation();
-            if (p.x >= corner.x -5 && corner.x + 5 >= p.x
-                    && p.y >= corner.y -5 && corner.y + 5 >= p.y)
-                return true;
-        }
-        return false;
+        return dialogs.values().stream()
+                .map(Component::getLocation)
+                .anyMatch(corner -> p.x >= corner.x - 5 && corner.x + 5 >= p.x && p.y >= corner.y - 5 && corner.y + 5 >= p.y);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 16438)
@@ -24,4 +24,5 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 import javax.swing.JOptionPane;
@@ -203,10 +204,6 @@
      */
     public static void exportPreferencesKeysByPatternToFile(String fileName, boolean append, String pattern) {
-        List<String> keySet = new ArrayList<>();
         Map<String, Setting<?>> allSettings = Preferences.main().getAllSettings();
-        for (String key: allSettings.keySet()) {
-            if (key.matches(pattern))
-                keySet.add(key);
-        }
+        List<String> keySet = allSettings.keySet().stream().filter(key -> key.matches(pattern)).collect(Collectors.toList());
         exportPreferencesKeysToFile(fileName, append, keySet);
     }
Index: trunk/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/io/OpenChangesetComboBoxModel.java	(revision 16438)
@@ -23,8 +23,6 @@
 
     protected Changeset getChangesetById(long id) {
-        for (Changeset cs : changesets) {
-            if (cs.getId() == id) return cs;
-        }
-        return null;
+        return changesets.stream().filter(cs -> cs.getId() == id)
+                .findFirst().orElse(null);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/io/SaveLayersModel.java	(revision 16438)
@@ -6,6 +6,8 @@
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.table.DefaultTableModel;
@@ -120,25 +122,17 @@
 
     public List<SaveLayerInfo> getLayersWithoutFilesAndSaveRequest() {
-        List<SaveLayerInfo> ret = new ArrayList<>();
-        if (layerInfo != null) {
-            for (SaveLayerInfo info: layerInfo) {
-                if (info.isDoSaveToFile() && info.getFile() == null) {
-                    ret.add(info);
-                }
-            }
-        }
-        return ret;
+        if (layerInfo == null) {
+            return Collections.emptyList();
+        }
+        return layerInfo.stream().filter(info -> info.isDoSaveToFile() && info.getFile() == null).collect(Collectors.toList());
     }
 
     public List<SaveLayerInfo> getLayersWithIllegalFilesAndSaveRequest() {
-        List<SaveLayerInfo> ret = new ArrayList<>();
-        if (layerInfo != null) {
-            for (SaveLayerInfo info: layerInfo) {
-                if (info.isDoSaveToFile() && info.getFile() != null && info.getFile().exists() && !info.getFile().canWrite()) {
-                    ret.add(info);
-                }
-            }
-        }
-        return ret;
+        if (layerInfo == null) {
+            return Collections.emptyList();
+        }
+        return layerInfo.stream()
+                .filter(info -> info.isDoSaveToFile() && info.getFile() != null && info.getFile().exists() && !info.getFile().canWrite())
+                .collect(Collectors.toList());
     }
 
@@ -157,25 +151,15 @@
 
     public List<SaveLayerInfo> getLayersToUpload() {
-        List<SaveLayerInfo> ret = new ArrayList<>();
-        if (layerInfo != null) {
-            for (SaveLayerInfo info: layerInfo) {
-                if (info.isDoUploadToServer()) {
-                    ret.add(info);
-                }
-            }
-        }
-        return ret;
+        if (layerInfo == null) {
+            return Collections.emptyList();
+        }
+        return layerInfo.stream().filter(SaveLayerInfo::isDoUploadToServer).collect(Collectors.toList());
     }
 
     public List<SaveLayerInfo> getLayersToSave() {
-        List<SaveLayerInfo> ret = new ArrayList<>();
-        if (layerInfo != null) {
-            for (SaveLayerInfo info: layerInfo) {
-                if (info.isDoSaveToFile()) {
-                    ret.add(info);
-                }
-            }
-        }
-        return ret;
+        if (layerInfo == null) {
+            return Collections.emptyList();
+        }
+        return layerInfo.stream().filter(SaveLayerInfo::isDoSaveToFile).collect(Collectors.toList());
     }
 
@@ -197,9 +181,7 @@
 
     public SaveLayerInfo getSaveLayerInfo(AbstractModifiableLayer layer) {
-        for (SaveLayerInfo info: this.layerInfo) {
-            if (info.getLayer() == layer)
-                return info;
-        }
-        return null;
+        return this.layerInfo.stream()
+                .filter(info -> info.getLayer() == layer)
+                .findFirst().orElse(null);
     }
 
@@ -222,23 +204,13 @@
 
     public int getNumCancel() {
-        int ret = 0;
-        for (SaveLayerInfo info: layerInfo) {
-            if (UploadOrSaveState.CANCELED == info.getSaveState()
-                    || UploadOrSaveState.CANCELED == info.getUploadState()) {
-                ret++;
-            }
-        }
-        return ret;
+        return (int) layerInfo.stream()
+                .filter(info -> UploadOrSaveState.CANCELED == info.getSaveState() || UploadOrSaveState.CANCELED == info.getUploadState())
+                .count();
     }
 
     public int getNumFailed() {
-        int ret = 0;
-        for (SaveLayerInfo info: layerInfo) {
-            if (UploadOrSaveState.FAILED == info.getSaveState()
-                    || UploadOrSaveState.FAILED == info.getUploadState()) {
-                ret++;
-            }
-        }
-        return ret;
+        return (int) layerInfo.stream()
+                .filter(info -> UploadOrSaveState.FAILED == info.getSaveState() || UploadOrSaveState.FAILED == info.getUploadState())
+                .count();
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadLayerTask.java	(revision 16438)
@@ -72,9 +72,7 @@
 
     protected OsmPrimitive getPrimitive(OsmPrimitiveType type, long id) {
-        for (OsmPrimitive p: toUpload) {
-            if (OsmPrimitiveType.from(p) == type && p.getId() == id)
-                return p;
-        }
-        return null;
+        return toUpload.stream()
+                .filter(p -> OsmPrimitiveType.from(p) == type && p.getId() == id)
+                .findFirst().orElse(null);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java	(revision 16438)
@@ -12,8 +12,10 @@
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -251,12 +253,7 @@
             if (indices == null || indices.length == 0)
                 return Collections.emptyList();
-            List<OsmPrimitive> ret = new ArrayList<>(indices.length);
-            for (int i: indices) {
-                if (i < 0) {
-                    continue;
-                }
-                ret.add(data.get(i));
-            }
-            return ret;
+            return Arrays.stream(indices).filter(i -> i >= 0)
+                    .mapToObj(i -> data.get(i))
+                    .collect(Collectors.toList());
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java	(revision 16438)
@@ -299,12 +299,8 @@
 
     protected UploadStrategy getUploadStrategy() {
-        UploadStrategy strategy = null;
-        for (Entry<UploadStrategy, JRadioButton> e : rbStrategy.entrySet()) {
-            if (e.getValue().isSelected()) {
-                strategy = e.getKey();
-                break;
-            }
-        }
-        return strategy;
+        return rbStrategy.entrySet().stream()
+                .filter(e -> e.getValue().isSelected())
+                .map(Entry::getKey)
+                .findFirst().orElse(null);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/NativeScaleLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/NativeScaleLayer.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/NativeScaleLayer.java	(revision 16438)
@@ -6,4 +6,5 @@
 import java.util.List;
 import java.util.Locale;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.gui.NavigatableComponent;
@@ -233,9 +234,5 @@
         @Override
         public String toString() {
-            StringBuilder stringBuilder = new StringBuilder();
-            for (Scale s: this.scales) {
-                stringBuilder.append(s.toString() + '\n');
-            }
-            return stringBuilder.toString();
+            return this.scales.stream().map(Scale::toString).collect(Collectors.joining("\n"));
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 16438)
@@ -32,4 +32,5 @@
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
@@ -38,4 +39,6 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.swing.AbstractAction;
@@ -52,5 +55,4 @@
 import org.openstreetmap.josm.data.APIDataSet;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.DataSource;
 import org.openstreetmap.josm.data.ProjectionBounds;
 import org.openstreetmap.josm.data.UndoRedoHandler;
@@ -826,10 +828,6 @@
 
     private static boolean containsOnlyGpxTags(Tagged t) {
-        for (String key : t.getKeys().keySet()) {
-            if (!GpxConstants.WPT_KEYS.contains(key) && !key.startsWith(GpxConstants.GPX_PREFIX)) {
-                return false;
-            }
-        }
-        return true;
+        return t.getKeys().keySet().stream()
+                .allMatch(key -> GpxConstants.WPT_KEYS.contains(key) || key.startsWith(GpxConstants.GPX_PREFIX));
     }
 
@@ -890,11 +888,9 @@
         addStringIfPresent(wpt, n, GpxConstants.GPX_SRC, "source", "source:position");
 
-        Collection<GpxLink> links = new ArrayList<>();
-        for (String key : new String[]{"link", "url", "website", "contact:website"}) {
-            String value = gpxVal(n, key);
-            if (value != null) {
-                links.add(new GpxLink(value));
-            }
-        }
+        Collection<GpxLink> links = Stream.of("link", "url", "website", "contact:website")
+                .map(key -> gpxVal(n, key))
+                .filter(Objects::nonNull)
+                .map(GpxLink::new)
+                .collect(Collectors.toList());
         wpt.put(GpxConstants.META_LINKS, links);
 
@@ -968,14 +964,10 @@
 
     private static void addStringIfPresent(WayPoint wpt, OsmPrimitive p, String gpxKey, String... osmKeys) {
-        List<String> possibleKeys = new ArrayList<>(Arrays.asList(osmKeys));
-        possibleKeys.add(0, gpxKey);
-        for (String key : possibleKeys) {
-            String value = gpxVal(p, key);
-            // Sanity checks
-            if (value != null && (!GpxConstants.PT_FIX.equals(gpxKey) || GpxConstants.FIX_VALUES.contains(value))) {
-                wpt.put(gpxKey, value);
-                break;
-            }
-        }
+        Stream.concat(Stream.of(gpxKey), Arrays.stream(osmKeys))
+                .map(key -> gpxVal(p, key))
+                // Sanity checks
+                .filter(value -> value != null && (!GpxConstants.PT_FIX.equals(gpxKey) || GpxConstants.FIX_VALUES.contains(value)))
+                .findFirst()
+                .ifPresent(value -> wpt.put(gpxKey, value));
     }
 
@@ -1029,12 +1021,6 @@
             return true;
 
-        boolean layerBoundsPoint = false;
-        for (DataSource src : this.data.getDataSources()) {
-            if (src.bounds.contains(coor)) {
-                layerBoundsPoint = true;
-                break;
-            }
-        }
-        return layerBoundsPoint;
+        return this.data.getDataSources().stream()
+                .anyMatch(src -> src.bounds.contains(coor));
     }
 
@@ -1229,11 +1215,6 @@
      */
     private boolean isDataSetEmpty() {
-        if (data != null) {
-            for (OsmPrimitive osm : data.allNonDeletedPrimitives()) {
-                if (!osm.isDeleted() || !osm.isNewOrUndeleted())
-                    return false;
-            }
-        }
-        return true;
+        return data == null || data.allNonDeletedPrimitives().stream()
+                .allMatch(osm -> osm.isDeleted() && osm.isNewOrUndeleted());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 16438)
@@ -2,7 +2,8 @@
 package org.openstreetmap.josm.gui.layer;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import org.apache.commons.jcs3.access.CacheAccess;
@@ -151,9 +152,8 @@
 
     private static ScaleList initNativeScaleList() {
-        Collection<Double> scales = new ArrayList<>(AbstractTileSourceLayer.MAX_ZOOM);
-        for (int zoom = AbstractTileSourceLayer.MIN_ZOOM; zoom <= AbstractTileSourceLayer.MAX_ZOOM; zoom++) {
-            double scale = OsmMercator.EARTH_RADIUS * Math.PI * 2 / Math.pow(2, zoom) / OsmMercator.DEFAUL_TILE_SIZE;
-            scales.add(scale);
-        }
+        Collection<Double> scales = IntStream.rangeClosed(AbstractTileSourceLayer.MIN_ZOOM, AbstractTileSourceLayer.MAX_ZOOM)
+                .mapToDouble(zoom -> OsmMercator.EARTH_RADIUS * Math.PI * 2 / Math.pow(2, zoom) / OsmMercator.DEFAUL_TILE_SIZE)
+                .boxed()
+                .collect(Collectors.toList());
         return new ScaleList(scales);
     }
Index: trunk/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java	(revision 16438)
@@ -6,6 +6,8 @@
 import java.awt.Graphics2D;
 import java.io.File;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.Action;
@@ -94,10 +96,8 @@
         }
 
-        StringBuilder b = new StringBuilder();
-        for (Severity s : Severity.values()) {
-            if (errorTree.containsKey(s)) {
-                b.append(tr(s.toString())).append(": ").append(errorTree.get(s).size()).append("<br>");
-            }
-        }
+        String b = Arrays.stream(Severity.values())
+                .filter(errorTree::containsKey)
+                .map(s -> tr(s.toString()) + ": " + errorTree.get(s).size() + "<br>")
+                .collect(Collectors.joining());
 
         if (b.length() == 0)
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 16438)
@@ -71,8 +71,7 @@
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.gpx.GpxImageCorrelation;
+import org.openstreetmap.josm.data.gpx.GpxImageEntry;
 import org.openstreetmap.josm.data.gpx.GpxTimeOffset;
 import org.openstreetmap.josm.data.gpx.GpxTimezone;
-import org.openstreetmap.josm.data.gpx.IGpxTrack;
-import org.openstreetmap.josm.data.gpx.IGpxTrackSegment;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
@@ -1263,20 +1262,12 @@
         long firstExifDate = imgs.get(0).getExifTime().getTime();
 
-        long firstGPXDate = -1;
         // Finds first GPX point
-        outer: for (IGpxTrack trk : gpx.tracks) {
-            for (IGpxTrackSegment segment : trk.getSegments()) {
-                for (WayPoint curWp : segment.getWayPoints()) {
-                    if (curWp.hasDate()) {
-                        firstGPXDate = curWp.getTimeInMillis();
-                        break outer;
-                    }
-                }
-            }
-        }
-
-        if (firstGPXDate < 0) {
-            throw new NoGpxTimestamps();
-        }
+        long firstGPXDate = gpx.tracks.stream()
+                .flatMap(trk -> trk.getSegments().stream())
+                .flatMap(segment -> segment.getWayPoints().stream())
+                .filter(WayPoint::hasDate)
+                .map(WayPoint::getTimeInMillis)
+                .findFirst()
+                .orElseThrow(NoGpxTimestamps::new);
 
         return GpxTimeOffset.milliseconds(firstExifDate - firstGPXDate).splitOutTimezone();
@@ -1339,24 +1330,10 @@
      */
     private List<ImageEntry> getSortedImgList(boolean exif, boolean tagged) {
-        List<ImageEntry> dateImgLst = new ArrayList<>(yLayer.getImageData().getImages().size());
-        for (ImageEntry e : yLayer.getImageData().getImages()) {
-            if (!e.hasExifTime()) {
-                continue;
-            }
-
-            if (e.getExifCoor() != null && !exif) {
-                continue;
-            }
-
-            if (!tagged && e.isTagged() && e.getExifCoor() == null) {
-                continue;
-            }
-
-            dateImgLst.add(e);
-        }
-
-        dateImgLst.sort(Comparator.comparing(ImageEntry::getExifTime));
-
-        return dateImgLst;
+        return yLayer.getImageData().getImages().stream()
+                .filter(GpxImageEntry::hasExifTime)
+                .filter(e -> e.getExifCoor() == null || exif)
+                .filter(e -> tagged || !e.isTagged() || e.getExifCoor() != null)
+                .sorted(Comparator.comparing(ImageEntry::getExifTime))
+                .collect(Collectors.toList());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 16438)
@@ -797,12 +797,5 @@
             return true;
         }
-        if (supportedMapModes != null) {
-            for (MapMode supmmode: supportedMapModes) {
-                if (mapMode == supmmode) {
-                    return true;
-                }
-            }
-        }
-        return false;
+        return supportedMapModes != null && supportedMapModes.stream().anyMatch(supmmode -> mapMode == supmmode);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java	(revision 16438)
@@ -6,6 +6,6 @@
 import java.awt.event.ActionEvent;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -16,6 +16,4 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.gpx.GpxData;
-import org.openstreetmap.josm.data.gpx.IGpxTrack;
-import org.openstreetmap.josm.data.gpx.IGpxTrackSegment;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -91,12 +89,9 @@
 
     PrecacheWmsTask createTask() {
-        List<LatLon> points = new ArrayList<>();
-        for (IGpxTrack trk : data.tracks) {
-            for (IGpxTrackSegment segment : trk.getSegments()) {
-                for (WayPoint p : segment.getWayPoints()) {
-                    points.add(p.getCoor());
-                }
-            }
-        }
+        List<LatLon> points = data.tracks.stream()
+                .flatMap(trk -> trk.getSegments().stream())
+                .flatMap(segment -> segment.getWayPoints().stream())
+                .map(WayPoint::getCoor)
+                .collect(Collectors.toList());
         for (WayPoint p : data.waypoints) {
             points.add(p.getCoor());
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java	(revision 16438)
@@ -12,4 +12,5 @@
 import java.util.Collection;
 import java.util.Comparator;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -93,21 +94,9 @@
         if (fc != null) {
             File[] sel = fc.getSelectedFiles();
-            // sort files in increasing order of timestamp (this is the end time, but so
-            // long as they don't overlap, that's fine)
-            if (sel.length > 1) {
-                Arrays.sort(sel, Comparator.comparingLong(File::lastModified));
-            }
-            StringBuilder names = new StringBuilder();
-            for (File file : sel) {
-                if (names.length() == 0) {
-                    names.append(" (");
-                } else {
-                    names.append(", ");
-                }
-                names.append(file.getName());
-            }
-            if (names.length() > 0) {
-                names.append(')');
-            }
+            String names = Arrays.stream(sel)
+                    // sort files in increasing order of timestamp (this is the end time, but so long as they don't overlap, that's fine)
+                    .sorted(Comparator.comparingLong(File::lastModified))
+                    .map(File::getName)
+                    .collect(Collectors.joining(", ", " (", ")"));
             MarkerLayer ml = new MarkerLayer(new GpxData(),
                     tr("Audio markers from {0}", layer.getName()) + names, layer.getAssociatedFile(), layer);
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 16438)
@@ -16,4 +16,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import javax.swing.ImageIcon;
@@ -117,10 +118,8 @@
      */
     public static Collection<Marker> createMarkers(WayPoint wpt, File relativePath, MarkerLayer parentLayer, double time, double offset) {
-        for (MarkerProducers maker : Marker.markerProducers) {
-            final Collection<Marker> markers = maker.createMarkers(wpt, relativePath, parentLayer, time, offset);
-            if (markers != null)
-                return markers;
-        }
-        return null;
+        return Marker.markerProducers.stream()
+                .map(maker -> maker.createMarkers(wpt, relativePath, parentLayer, time, offset))
+                .filter(Objects::nonNull)
+                .findFirst().orElse(null);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 16438)
@@ -266,10 +266,6 @@
         if (syncAudioMarker == null) {
             // find the first audioMarker in this layer
-            for (Marker m : data) {
-                if (m instanceof AudioMarker) {
-                    syncAudioMarker = (AudioMarker) m;
-                    break;
-                }
-            }
+            syncAudioMarker = Utils.filteredCollection(data, AudioMarker.class).stream()
+                    .findFirst().orElse(syncAudioMarker);
         }
         if (syncAudioMarker == null)
@@ -492,11 +488,5 @@
             if (e.getButton() != MouseEvent.BUTTON1)
                 return;
-            boolean mousePressedInButton = false;
-            for (Marker mkr : data) {
-                if (mkr.containsPoint(e.getPoint())) {
-                    mousePressedInButton = true;
-                    break;
-                }
-            }
+            boolean mousePressedInButton = data.stream().anyMatch(mkr -> mkr.containsPoint(e.getPoint()));
             if (!mousePressedInButton)
                 return;
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintMenu.java	(revision 16438)
@@ -16,5 +16,4 @@
 import org.openstreetmap.josm.gui.dialogs.MapPaintDialog;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.MapPaintSylesUpdateListener;
@@ -67,14 +66,10 @@
         public void updateEnabledState() {
             setEnabled(MainApplication.isDisplayingMapView()
-                    && (MainApplication.getLayerManager().getActiveData() != null || mapHasGpxorMarkerLayer()));
+                    && (MainApplication.getLayerManager().getActiveData() != null || mapHasGpxOrMarkerLayer()));
         }
 
-        private static boolean mapHasGpxorMarkerLayer() {
-            for (Layer layer : MainApplication.getLayerManager().getLayers()) {
-                if (layer instanceof GpxLayer || layer instanceof MarkerLayer) {
-                    return true;
-                }
-            }
-            return false;
+        private static boolean mapHasGpxOrMarkerLayer() {
+            return MainApplication.getLayerManager().getLayers().stream()
+                    .anyMatch(layer -> layer instanceof GpxLayer || layer instanceof MarkerLayer);
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/loader/MapPaintStyleLoader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/loader/MapPaintStyleLoader.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/loader/MapPaintStyleLoader.java	(revision 16438)
@@ -4,8 +4,9 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
@@ -62,9 +63,6 @@
      */
     public static void reloadStyles(final int... sel) {
-        List<StyleSource> toReload = new ArrayList<>();
         List<StyleSource> data = MapPaintStyles.getStyles().getStyleSources();
-        for (int i : sel) {
-            toReload.add(data.get(i));
-        }
+        List<StyleSource> toReload = Arrays.stream(sel).mapToObj(data::get).collect(Collectors.toList());
         MainApplication.worker.submit(new MapPaintStyleLoader(toReload));
     }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ConditionFactory.java	(revision 16438)
@@ -6,5 +6,4 @@
 import java.util.Arrays;
 import java.util.EnumSet;
-import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
@@ -408,10 +407,6 @@
         @Override
         protected boolean matches(Environment env) {
-            for (Map.Entry<String, String> kv: env.osm.getKeys().entrySet()) {
-                if (keyPattern.matcher(kv.getKey()).find() && pattern.matcher(kv.getValue()).find()) {
-                    return true;
-                }
-            }
-            return false;
+            return env.osm.getKeys().entrySet().stream()
+                    .anyMatch(kv -> keyPattern.matcher(kv.getKey()).find() && pattern.matcher(kv.getValue()).find());
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 16438)
@@ -15,4 +15,5 @@
 import java.util.Objects;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.gui.mappaint.Cascade;
@@ -444,12 +445,7 @@
         @Override
         public String toString() {
-            StringBuilder b = new StringBuilder("ArrayFunction~");
-            b.append(m.getName()).append('(');
-            for (int i = 0; i < args.size(); ++i) {
-                if (i > 0) b.append(',');
-                b.append(arrayComponentType).append(' ').append(args.get(i));
-            }
-            b.append(')');
-            return b.toString();
+            return args.stream()
+                    .map(arg -> arrayComponentType + " " + arg)
+                    .collect(Collectors.joining(",", "ArrayFunction~" + m.getName() + '(', ")"));
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 16438)
@@ -24,5 +24,4 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
-import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
@@ -455,10 +454,8 @@
             if (env.osm != null) {
                 // we don't have a matched parent, so just search all referrers
-                for (IPrimitive parent : env.osm.getReferrers()) {
-                    String value = parent.get(key);
-                    if (value != null) {
-                        return value;
-                    }
-                }
+                return env.osm.getReferrers().stream()
+                        .map(parent -> parent.get(key))
+                        .filter(Objects::nonNull)
+                        .findFirst().orElse(null);
             }
             return null;
@@ -617,7 +614,7 @@
             List<String> roleList = Arrays.asList(roles);
             Relation rel = (Relation) env.osm;
-            for (RelationMember member : rel.getMembers()) {
-                if (roleList.contains(member.getRole())) rValue++;
-            }
+            rValue = (int) rel.getMembers().stream()
+                    .filter(member -> roleList.contains(member.getRole()))
+                    .count();
         }
         return rValue;
@@ -1162,10 +1159,6 @@
      */
     public static boolean inside(Environment env, String codes) { // NO_UCD (unused code)
-        for (String code : codes.toUpperCase(Locale.ENGLISH).split(",")) {
-            if (Territories.isIso3166Code(code.trim(), center(env))) {
-                return true;
-            }
-        }
-        return false;
+        return Arrays.stream(codes.toUpperCase(Locale.ENGLISH).split(","))
+                .anyMatch(code -> Territories.isIso3166Code(code.trim(), center(env)));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 16438)
@@ -235,10 +235,5 @@
 
             private boolean firstAndLastOnly() {
-                for (Condition c : link.conds) {
-                    if (!(c instanceof IndexCondition) || !((IndexCondition) c).isFirstOrLast) {
-                        return false;
-                    }
-                }
-                return true;
+                return link.conds.stream().allMatch(c -> c instanceof IndexCondition && ((IndexCondition) c).isFirstOrLast);
             }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java	(revision 16438)
@@ -7,4 +7,5 @@
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.data.osm.IPrimitive;
@@ -13,4 +14,5 @@
 import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.LanguageInfo;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -175,18 +177,10 @@
 
         private static List<String> buildNameTags(List<String> nameTags) {
-            List<String> result = new ArrayList<>();
-            if (nameTags != null) {
-                for (String tag: nameTags) {
-                    if (tag == null) {
-                        continue;
-                    }
-                    tag = tag.trim();
-                    if (tag.isEmpty()) {
-                        continue;
-                    }
-                    result.add(tag);
-                }
-            }
-            return result;
+            if (nameTags == null) {
+                return new ArrayList<>();
+            }
+            return nameTags.stream()
+                    .filter(tag -> !Utils.isStripEmpty(tag))
+                    .collect(Collectors.toList());
         }
 
@@ -252,11 +246,6 @@
             StringBuilder name = new StringBuilder();
             if (!n.hasKeys()) return null;
-            for (String rn : nameTags) {
-                String val = n.get(rn);
-                if (val != null) {
-                    name.append(val);
-                    break;
-                }
-            }
+            nameTags.stream().map(n::get).filter(Objects::nonNull).findFirst()
+                    .ifPresent(name::append);
             for (String rn : nameComplementTags) {
                 String comp = n.get(rn);
Index: trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 16438)
@@ -38,4 +38,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -615,11 +617,8 @@
          */
         public List<ExtendedSourceEntry> getSelected() {
-            List<ExtendedSourceEntry> ret = new ArrayList<>();
-            for (int i = 0; i < data.size(); i++) {
-                if (selectionModel.isSelectedIndex(i)) {
-                    ret.add(data.get(i));
-                }
-            }
-            return ret;
+            return IntStream.range(0, data.size())
+                    .filter(selectionModel::isSelectedIndex)
+                    .mapToObj(data::get)
+                    .collect(Collectors.toList());
         }
     }
@@ -729,11 +728,8 @@
          */
         public void removeIdxs(Collection<Integer> idxs) {
-            List<SourceEntry> newData = new ArrayList<>();
-            for (int i = 0; i < data.size(); ++i) {
-                if (!idxs.contains(i)) {
-                    newData.add(data.get(i));
-                }
-            }
-            data = newData;
+            data = IntStream.range(0, data.size())
+                    .filter(i -> !idxs.contains(i))
+                    .mapToObj(i -> data.get(i))
+                    .collect(Collectors.toList());
             fireTableDataChanged();
         }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 16438)
@@ -27,4 +27,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
@@ -226,9 +227,5 @@
          */
         public boolean hasParameters() {
-            if (!(getAction() instanceof ParameterizedAction)) return false;
-            for (Object o: parameters.values()) {
-                if (o != null) return true;
-            }
-            return false;
+            return getAction() instanceof ParameterizedAction && parameters.values().stream().anyMatch(Objects::nonNull);
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/advanced/ExportProfileAction.java	(revision 16438)
@@ -7,8 +7,8 @@
 import java.awt.event.ActionEvent;
 import java.io.File;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -48,11 +48,8 @@
     @Override
     public void actionPerformed(ActionEvent ae) {
-        List<String> keys = new ArrayList<>();
         Map<String, Setting<?>> all = prefs.getAllSettings();
-        for (String key: all.keySet()) {
-            if (key.matches(prefPattern)) {
-                keys.add(key);
-            }
-        }
+        List<String> keys = all.keySet().stream()
+                .filter(key -> key.matches(prefPattern))
+                .collect(Collectors.toList());
         if (keys.isEmpty()) {
             JOptionPane.showMessageDialog(MainApplication.getMainFrame(),
Index: trunk/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/advanced/PreferencesTable.java	(revision 16438)
@@ -11,8 +11,9 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import javax.swing.ButtonGroup;
@@ -80,10 +81,7 @@
      */
     public List<PrefEntry> getSelectedItems() {
-        List<PrefEntry> entries = new ArrayList<>();
-        for (int row : getSelectedRows()) {
-            PrefEntry p = (PrefEntry) model.getValueAt(row, -1);
-            entries.add(p);
-        }
-        return entries;
+        return Arrays.stream(getSelectedRows())
+                .mapToObj(row -> (PrefEntry) model.getValueAt(row, -1))
+                .collect(Collectors.toList());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java	(revision 16438)
@@ -94,13 +94,8 @@
             if (language != null) {
                 String lang = LanguageInfo.getJavaLocaleCode(language);
-                for (Locale locale: data) {
-                    if (locale == null) {
-                        continue;
-                    }
-                    if (locale.toString().equals(lang)) {
-                        setSelectedItem(locale);
-                        return;
-                    }
-                }
+                data.stream()
+                        .filter(locale -> locale != null && locale.toString().equals(lang))
+                        .findFirst()
+                        .ifPresent(this::setSelectedItem);
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryProvidersPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryProvidersPanel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryProvidersPanel.java	(revision 16438)
@@ -21,4 +21,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
@@ -127,10 +128,6 @@
             GuiHelper.setBackgroundReadable(label, UIManager.getColor("Table.background"));
             if (value != null) { // Fix #8159
-                String t = value.toString();
-                for (ImageryInfo l : layers) {
-                    if (l.getExtendedUrl().equals(t)) {
-                        GuiHelper.setBackgroundReadable(label, IMAGERY_BACKGROUND_COLOR.get());
-                        break;
-                    }
+                if (layers.stream().anyMatch(l -> Objects.equals(l.getExtendedUrl(), value.toString()))) {
+                    GuiHelper.setBackgroundReadable(label, IMAGERY_BACKGROUND_COLOR.get());
                 }
                 label.setToolTipText((String) value);
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginCheckBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginCheckBox.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginCheckBox.java	(revision 16438)
@@ -8,6 +8,6 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.util.HashSet;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.swing.JCheckBox;
@@ -59,15 +59,9 @@
         } else if (!isSelected()) {
             // If the plugin has been unselected, was it required by other plugins still selected ?
-            Set<String> otherPlugins = new HashSet<>();
-            for (PluginInformation p : ppModel.getAvailablePlugins()) {
-                if (!p.equals(pi) && p.requires != null && ppModel.isSelectedPlugin(p.getName())) {
-                    for (String s : p.getRequiredPlugins()) {
-                        if (s.equals(pi.getName()) || s.equals(pi.provides)) {
-                            otherPlugins.add(p.getName());
-                            break;
-                        }
-                    }
-                }
-            }
+            Set<String> otherPlugins = ppModel.getAvailablePlugins().stream()
+                    .filter(p -> !p.equals(pi) && p.requires != null && ppModel.isSelectedPlugin(p.getName()))
+                    .filter(p -> p.getRequiredPlugins().stream().anyMatch(s -> s.equals(pi.getName()) || s.equals(pi.provides)))
+                    .map(PluginInformation::getName)
+                    .collect(Collectors.toSet());
             if (!otherPlugins.isEmpty()) {
                 alertPluginStillRequired(panel, pi.getName(), otherPlugins);
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 16438)
@@ -23,4 +23,6 @@
 import java.util.Set;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -331,8 +333,5 @@
                     return requiresRestart;
             }
-            for (PluginInformation pi : model.getNewlyActivatedPlugins()) {
-                if (!pi.canloadatruntime)
-                    return true;
-            }
+            return model.getNewlyActivatedPlugins().stream().anyMatch(pi -> !pi.canloadatruntime);
         }
         return false;
@@ -436,11 +435,6 @@
                 if (pluginDownloadTask.isCanceled())
                     return;
-                boolean restartRequired = false;
-                for (PluginInformation pi : pluginDownloadTask.getDownloadedPlugins()) {
-                    if (!model.getNewlyActivatedPlugins().contains(pi) || !pi.canloadatruntime) {
-                        restartRequired = true;
-                        break;
-                    }
-                }
+                boolean restartRequired = pluginDownloadTask.getDownloadedPlugins().stream()
+                        .anyMatch(pi -> !(model.getNewlyActivatedPlugins().contains(pi) && pi.canloadatruntime));
                 notifyDownloadResults(pnlPluginPreferences, pluginDownloadTask, restartRequired);
                 model.refreshLocalPluginVersion(pluginDownloadTask.getDownloadedPlugins());
@@ -638,9 +632,7 @@
             if (model.getSize() == 0)
                 return Collections.emptyList();
-            List<String> ret = new ArrayList<>(model.getSize());
-            for (int i = 0; i < model.getSize(); i++) {
-                ret.add(model.get(i));
-            }
-            return ret;
+            return IntStream.range(0, model.getSize())
+                    .mapToObj(model::get)
+                    .collect(Collectors.toList());
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java	(revision 16438)
@@ -13,5 +13,7 @@
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.gui.util.ChangeNotifier;
@@ -137,14 +139,8 @@
      */
     public List<PluginInformation> getSelectedPlugins() {
-        List<PluginInformation> ret = new LinkedList<>();
-        for (PluginInformation pi: availablePlugins) {
-            if (selectedPluginsMap.get(pi) == null) {
-                continue;
-            }
-            if (selectedPluginsMap.get(pi)) {
-                ret.add(pi);
-            }
-        }
-        return ret;
+        return availablePlugins.stream()
+                .filter(pi -> selectedPluginsMap.get(pi) != null)
+                .filter(selectedPluginsMap::get)
+                .collect(Collectors.toList());
     }
 
@@ -155,9 +151,5 @@
      */
     public Set<String> getSelectedPluginNames() {
-        Set<String> ret = new HashSet<>();
-        for (PluginInformation pi: getSelectedPlugins()) {
-            ret.add(pi.name);
-        }
-        return ret;
+        return getSelectedPlugins().stream().map(pi -> pi.name).collect(Collectors.toSet());
     }
 
@@ -185,13 +177,8 @@
      */
     public Set<PluginInformation> getPluginsScheduledForUpdateOrDownload() {
-        Set<PluginInformation> ret = new HashSet<>();
-        for (String plugin: pendingDownloads) {
-            PluginInformation pi = getPluginInformation(plugin);
-            if (pi == null) {
-                continue;
-            }
-            ret.add(pi);
-        }
-        return ret;
+        return pendingDownloads.stream()
+                .map(this::getPluginInformation)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
     }
 
@@ -238,8 +225,7 @@
     public PluginInformation getPluginInformation(String name) {
         if (name != null) {
-            for (PluginInformation pi: availablePlugins) {
-                if (name.equals(pi.getName()) || name.equals(pi.provides))
-                    return pi;
-            }
+            return availablePlugins.stream()
+                    .filter(pi -> name.equals(pi.getName()) || name.equals(pi.provides))
+                    .findFirst().orElse(null);
         }
         return null;
@@ -303,14 +289,8 @@
      */
     public List<PluginInformation> getNewlyDeactivatedPlugins() {
-        List<PluginInformation> ret = new LinkedList<>();
-        for (PluginInformation pi: availablePlugins) {
-            if (!currentActivePlugins.contains(pi.name)) {
-                continue;
-            }
-            if (selectedPluginsMap.get(pi) == null || !selectedPluginsMap.get(pi)) {
-                ret.add(pi);
-            }
-        }
-        return ret;
+        return availablePlugins.stream()
+                .filter(pi -> currentActivePlugins.contains(pi.name))
+                .filter(pi -> selectedPluginsMap.get(pi) == null || !selectedPluginsMap.get(pi))
+                .collect(Collectors.toList());
     }
 
@@ -331,10 +311,5 @@
      */
     public Set<String> getNewlyActivatedPluginNames() {
-        Set<String> ret = new HashSet<>();
-        List<PluginInformation> plugins = getNewlyActivatedPlugins();
-        for (PluginInformation pi: plugins) {
-            ret.add(pi.name);
-        }
-        return ret;
+        return getNewlyActivatedPlugins().stream().map(pi -> pi.name).collect(Collectors.toSet());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java	(revision 16438)
@@ -8,4 +8,5 @@
 import java.awt.GridBagLayout;
 import java.awt.Insets;
+import java.util.Arrays;
 import java.util.EnumMap;
 import java.util.Locale;
@@ -51,9 +52,7 @@
                 return null;
             String prefValue = preferenceValue.trim().toLowerCase(Locale.ENGLISH);
-            for (Policy p: Policy.values()) {
-                if (p.getPreferencesValue().equals(prefValue))
-                    return p;
-            }
-            return null;
+            return Arrays.stream(Policy.values())
+                    .filter(p -> p.getPreferencesValue().equals(prefValue))
+                    .findFirst().orElse(null);
         }
     }
@@ -193,20 +192,12 @@
 
         // remember policy for version based update
-        //
-        for (Policy p: Policy.values()) {
-            if (rbVersionBasedUpatePolicy.get(p).isSelected()) {
-                Config.getPref().put("pluginmanager.version-based-update.policy", p.getPreferencesValue());
-                break;
-            }
-        }
+        Arrays.stream(Policy.values())
+                .filter(p -> rbVersionBasedUpatePolicy.get(p).isSelected()).findFirst()
+                .ifPresent(p -> Config.getPref().put("pluginmanager.version-based-update.policy", p.getPreferencesValue()));
 
         // remember policy for time based update
-        //
-        for (Policy p: Policy.values()) {
-            if (rbTimeBasedUpatePolicy.get(p).isSelected()) {
-                Config.getPref().put("pluginmanager.time-based-update.policy", p.getPreferencesValue());
-                break;
-            }
-        }
+        Arrays.stream(Policy.values())
+                .filter(p -> rbTimeBasedUpatePolicy.get(p).isSelected()).findFirst()
+                .ifPresent(p -> Config.getPref().put("pluginmanager.time-based-update.policy", p.getPreferencesValue()));
 
         // remember update interval
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java	(revision 16438)
@@ -7,4 +7,5 @@
 import java.util.Collection;
 import java.util.Collections;
+import java.util.stream.IntStream;
 
 import javax.swing.JLabel;
@@ -66,9 +67,5 @@
     @Override
     public String[] allCodes() {
-        String[] codes = new String[9];
-        for (int zone = 0; zone < 9; zone++) {
-            codes[zone] = "EPSG:" + (3942 + zone);
-        }
-        return codes;
+        return IntStream.range(0, 9).mapToObj(zone -> "EPSG:" + (3942 + zone)).toArray(String[]::new);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java	(revision 16438)
@@ -7,4 +7,5 @@
 import java.util.Collection;
 import java.util.Collections;
+import java.util.stream.IntStream;
 
 import javax.swing.JLabel;
@@ -61,9 +62,5 @@
     @Override
     public String[] allCodes() {
-        String[] codes = new String[4];
-        for (int zone = 0; zone < 4; zone++) {
-            codes[zone] = "EPSG:"+(27561+zone);
-        }
-        return codes;
+        return IntStream.range(0, 4).mapToObj(zone -> "EPSG:" + (27561 + zone)).toArray(String[]::new);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 16438)
@@ -14,4 +14,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.stream.IntStream;
 
 import javax.swing.BorderFactory;
@@ -354,17 +355,11 @@
         final ProjectionChoice pc = setupProjectionCombo();
 
-        for (int i = 0; i < coordinatesCombo.getItemCount(); ++i) {
-            if (coordinatesCombo.getItemAt(i).getId().equals(PROP_COORDINATES.get())) {
-                coordinatesCombo.setSelectedIndex(i);
-                break;
-            }
-        }
-
-        for (int i = 0; i < unitsValues.length; ++i) {
-            if (unitsValues[i].equals(SystemOfMeasurement.PROP_SYSTEM_OF_MEASUREMENT.get())) {
-                unitsCombo.setSelectedIndex(i);
-                break;
-            }
-        }
+        IntStream.range(0, coordinatesCombo.getItemCount())
+                .filter(i -> coordinatesCombo.getItemAt(i).getId().equals(PROP_COORDINATES.get())).findFirst()
+                .ifPresent(coordinatesCombo::setSelectedIndex);
+
+        IntStream.range(0, unitsValues.length)
+                .filter(i -> unitsValues[i].equals(SystemOfMeasurement.PROP_SYSTEM_OF_MEASUREMENT.get())).findFirst()
+                .ifPresent(unitsCombo::setSelectedIndex);
 
         projPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java	(revision 16438)
@@ -4,6 +4,8 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.stream.IntStream;
 
 import org.openstreetmap.josm.tools.Utils;
@@ -57,9 +59,5 @@
     @Override
     public Collection<String> getPreferencesFromCode(String code) {
-        for (String code2 : CODES) {
-            if (code.equals(code2))
-                return Collections.singleton(code2);
-        }
-        return null;
+        return Arrays.stream(CODES).filter(code::equals).findFirst().map(Collections::singleton).orElse(null);
     }
 
@@ -71,10 +69,7 @@
     @Override
     protected int zoneToIndex(String zone) {
-        for (int i = 0; i < CODES.length; i++) {
-            if (zone.equals(CODES[i])) {
-                return i;
-            }
-        }
-        return defaultIndex;
+        return IntStream.range(0, CODES.length)
+                .filter(i -> zone.equals(CODES[i]))
+                .findFirst().orElse(defaultIndex);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTMFranceDOMProjectionChoice.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTMFranceDOMProjectionChoice.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTMFranceDOMProjectionChoice.java	(revision 16438)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -64,9 +65,5 @@
     @Override
     public String[] allCodes() {
-        String[] res = new String[UTM_EPSGS.length];
-        for (int i = 0; i < UTM_EPSGS.length; ++i) {
-            res[i] = "EPSG:" + UTM_EPSGS[i];
-        }
-        return res;
+        return Arrays.stream(UTM_EPSGS).map(utmEpsg -> "EPSG:" + utmEpsg).toArray(String[]::new);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java	(revision 16438)
@@ -15,4 +15,5 @@
 import java.net.PasswordAuthentication;
 import java.net.ProxySelector;
+import java.util.Arrays;
 import java.util.EnumMap;
 import java.util.Map;
@@ -337,11 +338,7 @@
      */
     public void saveToPreferences() {
-        ProxyPolicy policy = null;
-        for (ProxyPolicy pp: ProxyPolicy.values()) {
-            if (rbProxyPolicy.get(pp).isSelected()) {
-                policy = pp;
-                break;
-            }
-        }
+        ProxyPolicy policy = Arrays.stream(ProxyPolicy.values())
+                .filter(pp -> rbProxyPolicy.get(pp).isSelected())
+                .findFirst().orElse(null);
         Config.getPref().put(DefaultProxySelector.PROXY_POLICY, Optional.ofNullable(policy).orElse(ProxyPolicy.NO_PROXY).getName());
         Config.getPref().put(DefaultProxySelector.PROXY_HTTP_HOST, tfProxyHttpHost.getText());
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TagEditorModel.java	(revision 16438)
@@ -7,12 +7,15 @@
 import java.beans.PropertyChangeSupport;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.EnumSet;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.DefaultListSelectionModel;
@@ -253,9 +256,5 @@
     public TagModel get(String name) {
         String key = (name == null) ? "" : name;
-        for (TagModel tag : tags) {
-            if (tag.getName().equals(key))
-                return tag;
-        }
-        return null;
+        return tags.stream().filter(tag -> tag.getName().equals(key)).findFirst().orElse(null);
     }
 
@@ -346,14 +345,6 @@
             return;
         commitPendingEdit();
-        List<TagModel> toDelete = new ArrayList<>();
-        for (int tagIdx : tagIndices) {
-            TagModel tag = tags.get(tagIdx);
-            if (tag != null) {
-                toDelete.add(tag);
-            }
-        }
-        for (TagModel tag : toDelete) {
-            tags.remove(tag);
-        }
+        List<TagModel> toDelete = Arrays.stream(tagIndices).mapToObj(tags::get).filter(Objects::nonNull).collect(Collectors.toList());
+        toDelete.forEach(tags::remove);
         fireTableDataChanged();
         setDirty(true);
@@ -506,11 +497,5 @@
      */
     public boolean includesTag(String key) {
-        if (key != null) {
-            for (TagModel tag : tags) {
-                if (tag.getName().equals(key))
-                    return true;
-            }
-        }
-        return false;
+        return key != null && tags.stream().anyMatch(tag -> tag.getName().equals(key));
     }
 
@@ -555,11 +540,8 @@
      */
     public List<String> getKeys() {
-        List<String> keys = new ArrayList<>();
-        for (TagModel tag: tags) {
-            if (!tag.getName().trim().isEmpty()) {
-                keys.add(tag.getName());
-            }
-        }
-        return keys;
+        return tags.stream()
+                .filter(tag -> !tag.getName().trim().isEmpty())
+                .map(TagModel::getName)
+                .collect(Collectors.toList());
     }
 
@@ -616,9 +598,7 @@
 
         commitPendingEdit();
-        Map<String, TagModel> modelTags = new HashMap<>();
-        for (int i = 0; i < getRowCount(); i++) {
-            TagModel tagModel = get(i);
-            modelTags.put(tagModel.getName(), tagModel);
-        }
+        Map<String, TagModel> modelTags = IntStream.range(0, getRowCount())
+                .mapToObj(this::get)
+                .collect(Collectors.toMap(TagModel::getName, tagModel -> tagModel, (a, b) -> b));
         for (Tag tag: tags) {
             TagModel existing = modelTags.get(tag.getKey());
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 16438)
@@ -63,5 +63,4 @@
 import org.openstreetmap.josm.gui.tagging.presets.items.PresetLink;
 import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
-import org.openstreetmap.josm.gui.tagging.presets.items.Roles.Role;
 import org.openstreetmap.josm.gui.tagging.presets.items.Space;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -71,4 +70,5 @@
 import org.openstreetmap.josm.tools.ImageResource;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.StreamUtils;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.template_engine.ParseError;
@@ -284,19 +284,4 @@
 
     /**
-     * Returns the tags being directly applied (without UI element) by {@link Key} items
-     *
-     * @return a list of tags
-     */
-    private List<Tag> getDirectlyAppliedTags() {
-        List<Tag> tags = new ArrayList<>();
-        for (TaggingPresetItem item : data) {
-            if (item instanceof Key) {
-                tags.add(((Key) item).asTag());
-            }
-        }
-        return tags;
-    }
-
-    /**
      * Creates a panel for this preset. This includes general information such as name and supported {@link TaggingPresetType types}.
      * This includes the elements from the individual {@link TaggingPresetItem items}.
@@ -317,5 +302,7 @@
             }
         }
-        final List<Tag> directlyAppliedTags = getDirectlyAppliedTags();
+        final List<Tag> directlyAppliedTags = Utils.filteredCollection(data, Key.class).stream()
+                .map(Key::asTag)
+                .collect(Collectors.toList());
         if (!directlyAppliedTags.isEmpty()) {
             final JLabel label = new JLabel(ImageProvider.get("pastetags"));
@@ -377,19 +364,14 @@
      */
     public boolean isShowable() {
-        for (TaggingPresetItem i : data) {
-            if (!(i instanceof Optional || i instanceof Space || i instanceof Key))
-                return true;
-        }
-        return false;
+        return data.stream().anyMatch(i -> !(i instanceof Optional || i instanceof Space || i instanceof Key));
     }
 
     public String suggestRoleForOsmPrimitive(OsmPrimitive osm) {
         if (roles != null && osm != null) {
-            for (Role i : roles.roles) {
-                if (i.memberExpression != null && i.memberExpression.match(osm)
-                        && (i.types == null || i.types.isEmpty() || i.types.contains(TaggingPresetType.forPrimitive(osm)))) {
-                    return i.key;
-                }
-            }
+            return roles.roles.stream()
+                    .filter(i -> i.memberExpression != null && i.memberExpression.match(osm))
+                    .filter(i -> i.types == null || i.types.isEmpty() || i.types.contains(TaggingPresetType.forPrimitive(osm)))
+                    .map(i -> i.key)
+                    .findFirst().orElse(null);
         }
         return null;
@@ -549,11 +531,8 @@
      */
     public static Command createCommand(Collection<OsmPrimitive> sel, List<Tag> changedTags) {
-        List<Command> cmds = new ArrayList<>();
-        for (Tag tag: changedTags) {
-            ChangePropertyCommand cmd = new ChangePropertyCommand(sel, tag.getKey(), tag.getValue());
-            if (cmd.getObjectsNumber() > 0) {
-                cmds.add(cmd);
-            }
-        }
+        List<Command> cmds = changedTags.stream()
+                .map(tag -> new ChangePropertyCommand(sel, tag.getKey(), tag.getValue()))
+                .filter(cmd -> cmd.getObjectsNumber() > 0)
+                .collect(StreamUtils.toUnmodifiableList());
 
         if (cmds.isEmpty())
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetType.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetType.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetType.java	(revision 16438)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging.presets;
+
+import java.util.Arrays;
 
 import org.openstreetmap.josm.data.osm.IPrimitive;
@@ -78,10 +80,7 @@
      */
     public static TaggingPresetType fromString(String type) {
-        for (TaggingPresetType t : TaggingPresetType.values()) {
-            if (t.getName().equals(type)) {
-                return t;
-            }
-        }
-        return null;
+        return Arrays.stream(TaggingPresetType.values())
+                .filter(t -> t.getName().equals(type))
+                .findFirst().orElse(null);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 16438)
@@ -33,4 +33,5 @@
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.FutureTask;
+import java.util.stream.Stream;
 
 import javax.swing.GrayFilter;
@@ -640,10 +641,8 @@
             Collection<String> fonts = Arrays.asList(
                     GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
-            for (String f : new String[]{"Khmer UI", "DaunPenh", "MoolBoran"}) {
-                if (fonts.contains(f)) {
-                    setUIFont(f);
-                    break;
-                }
-            }
+            Stream.of("Khmer UI", "DaunPenh", "MoolBoran")
+                    .filter(fonts::contains)
+                    .findFirst()
+                    .ifPresent(GuiHelper::setUIFont);
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/util/StayOpenPopupMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/StayOpenPopupMenu.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/util/StayOpenPopupMenu.java	(revision 16438)
@@ -56,12 +56,9 @@
                 Field tableField = appContextClass.getDeclaredField("table");
                 ReflectionUtils.setObjectsAccessible(tableField);
-                Object mouseGrabber = null;
-                for (Entry<?, ?> e : ((Map<?, ?>)
-                        tableField.get(appContextClass.getMethod("getAppContext").invoke(appContextClass))).entrySet()) {
-                    if (MOUSE_GRABBER_KEY.equals(Objects.toString(e.getKey()))) {
-                        mouseGrabber = e.getValue();
-                        break;
-                    }
-                }
+                Object mouseGrabber = ((Map<?, ?>) tableField.get(appContextClass.getMethod("getAppContext").invoke(appContextClass)))
+                        .entrySet().stream()
+                        .filter(e -> MOUSE_GRABBER_KEY.equals(Objects.toString(e.getKey())))
+                        .map(Entry::getValue)
+                        .findFirst().orElse(null);
                 final ChangeListener changeListener = (ChangeListener) mouseGrabber;
                 final AWTEventListener awtEventListener = (AWTEventListener) mouseGrabber;
Index: trunk/src/org/openstreetmap/josm/gui/widgets/EditableList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/EditableList.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/EditableList.java	(revision 16438)
@@ -7,6 +7,7 @@
 import java.awt.Dimension;
 import java.awt.GridBagLayout;
-import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 import javax.swing.DefaultListModel;
@@ -145,9 +146,7 @@
      */
     public List<String> getItems() {
-        final List<String> items = new ArrayList<>(sourcesList.getModel().getSize());
-        for (int i = 0; i < sourcesList.getModel().getSize(); ++i) {
-            items.add(sourcesList.getModel().getElementAt(i));
-        }
-        return items;
+        return IntStream.range(0, sourcesList.getModel().getSize())
+                .mapToObj(i -> sourcesList.getModel().getElementAt(i))
+                .collect(Collectors.toList());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/widgets/FilterField.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/FilterField.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/FilterField.java	(revision 16438)
@@ -4,8 +4,9 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.regex.PatternSyntaxException;
+import java.util.stream.Collectors;
 
 import javax.swing.JTable;
@@ -86,8 +87,7 @@
                     expr = expr.replace("+", "\\+");
                     // split search string on whitespace, do case-insensitive AND search
-                    List<RowFilter<Object, Object>> andFilters = new ArrayList<>();
-                    for (String word : expr.split("\\s+")) {
-                        andFilters.add(RowFilter.regexFilter("(?i)" + word));
-                    }
+                    List<RowFilter<Object, Object>> andFilters = Arrays.stream(expr.split("\\s+"))
+                            .map(word -> RowFilter.regexFilter("(?i)" + word))
+                            .collect(Collectors.toList());
                     sorter.setRowFilter(RowFilter.andFilter(andFilters));
                 }
Index: trunk/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/JosmComboBox.java	(revision 16438)
@@ -8,10 +8,10 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
-
-import javax.accessibility.Accessible;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
 import javax.swing.ComboBoxEditor;
 import javax.swing.ComboBoxModel;
@@ -80,8 +80,7 @@
     public JosmComboBox(ComboBoxModel<E> aModel) {
         super(aModel);
-        List<E> list = new ArrayList<>(aModel.getSize());
-        for (int i = 0; i < aModel.getSize(); i++) {
-            list.add(aModel.getElementAt(i));
-        }
+        List<E> list = IntStream.range(0, aModel.getSize())
+                .mapToObj(aModel::getElementAt)
+                .collect(Collectors.toList());
         init(findPrototypeDisplayValue(list));
     }
@@ -155,13 +154,10 @@
     }
 
-    @SuppressWarnings("unchecked")
     protected final JList<Object> getList() {
-        for (int i = 0; i < getUI().getAccessibleChildrenCount(this); i++) {
-            Accessible child = getUI().getAccessibleChild(this, i);
-            if (child instanceof ComboPopup) {
-                return ((ComboPopup) child).getList();
-            }
-        }
-        return null;
+        return IntStream.range(0, getUI().getAccessibleChildrenCount(this))
+                .mapToObj(i -> getUI().getAccessibleChild(this, i))
+                .filter(child -> child instanceof ComboPopup)
+                .map(child -> ((ComboPopup) child).getList())
+                .findFirst().orElse(null);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/MultiSplitLayout.java	(revision 16438)
@@ -777,8 +777,8 @@
         } else if (root instanceof Split) {
             Split split = (Split) root;
-            for (Node child : split.getChildren()) {
-                if (child.getBounds().contains(x, y))
-                    return dividerAt(child, x, y);
-            }
+            return split.getChildren().stream()
+                    .filter(child -> child.getBounds().contains(x, y))
+                    .map(child -> dividerAt(child, x, y))
+                    .findFirst().orElse(null);
         }
         return null;
Index: trunk/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java	(revision 16437)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/QuadStateCheckBox.java	(revision 16438)
@@ -10,4 +10,5 @@
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+import java.util.stream.IntStream;
 
 import javax.swing.AbstractAction;
@@ -216,10 +217,7 @@
         private void nextState() {
             State current = getState();
-            for (int i = 0; i < allowed.length; i++) {
-                if (allowed[i] == current) {
-                    setState((i == allowed.length-1) ? allowed[0] : allowed[i+1]);
-                    break;
-                }
-            }
+            IntStream.range(0, allowed.length).filter(i -> allowed[i] == current)
+                    .findFirst()
+                    .ifPresent(i -> setState((i == allowed.length - 1) ? allowed[0] : allowed[i + 1]));
         }
 
