Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 10590)
@@ -313,5 +313,12 @@
     private final QuadBuckets<Node> nodes = new QuadBuckets<>();
 
-    private <T extends OsmPrimitive> Collection<T> getPrimitives(Predicate<? super OsmPrimitive> predicate) {
+    /**
+     * Gets a filtered collection of primitives matching the given predicate.
+     * @param <T> The primitive type.
+     * @param predicate The predicate to match
+     * @return The list of primtives.
+     * @since 10590
+     */
+    public <T extends OsmPrimitive> Collection<T> getPrimitives(java.util.function.Predicate<? super OsmPrimitive> predicate) {
         return new SubclassFilteredCollection<>(allPrimitives, predicate);
     }
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 10590)
@@ -86,8 +86,23 @@
     public static final String PRESET_ICON_ERROR_MSG_PREFIX = "Could not get presets icon ";
 
+    /**
+     * The preset group this preset belongs to.
+     */
     public TaggingPresetMenu group;
+
+    /**
+     * The name of the tagging preset.
+     * @see #getRawName()
+     */
     public String name;
+    /**
+     * The icon name that was used for this preset.
+     */
     public String iconName;
     public String name_context;
+    /**
+     * A cache for the local name. Should never be accessed directly.
+     * @see #getLocaleName()
+     */
     public String locale_name;
     public boolean preset_name_label;
@@ -128,4 +143,8 @@
     }
 
+    /**
+     * Gets the localized version of the name
+     * @return The name that should be displayed to the user.
+     */
     public String getLocaleName() {
         if (locale_name == null) {
@@ -189,10 +208,5 @@
             public void finished(final ImageResource result) {
                 if (result != null) {
-                    GuiHelper.runInEDT(new Runnable() {
-                        @Override
-                        public void run() {
-                            result.attachImageIcon(TaggingPreset.this);
-                        }
-                    });
+                    GuiHelper.runInEDT(() -> result.attachImageIcon(TaggingPreset.this));
                 } else {
                     Main.warn(TaggingPreset.this + ": " + PRESET_ICON_ERROR_MSG_PREFIX + iconName);
@@ -386,10 +400,5 @@
                 members.add(rm);
             }
-            SwingUtilities.invokeLater(new Runnable() {
-                @Override
-                public void run() {
-                    RelationEditor.getEditor(Main.getLayerManager().getEditLayer(), r, members).setVisible(true);
-                }
-            });
+            SwingUtilities.invokeLater(() -> RelationEditor.getEditor(Main.getLayerManager().getEditLayer(), r, members).setVisible(true));
         }
         ds.setSelected(ds.getSelected()); // force update
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetHandler.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetHandler.java	(revision 10590)
@@ -8,7 +8,19 @@
 import org.openstreetmap.josm.data.osm.Tag;
 
+/**
+ * This interface needs to be implemented in order to display a tagging preset. It allows the preset dialog to query the primitives it should
+ * be displayed for and modify them.
+ */
 public interface TaggingPresetHandler {
+    /**
+     * Gets the selection the preset should be applied to.
+     * @return A collection of primitives.
+     */
     Collection<OsmPrimitive> getSelection();
 
+    /**
+     * Update the given tags on the selection.
+     * @param tags The tags to update.
+     */
     void updateTags(List<Tag> tags);
 }
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetListener.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetListener.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetListener.java	(revision 10590)
@@ -5,5 +5,7 @@
  * Notification of tagging presets events.
  * @since 7100
+ * @see TaggingPresets#addListener(TaggingPresetListener)
  */
+@FunctionalInterface
 public interface TaggingPresetListener {
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetReader.java	(revision 10590)
@@ -44,5 +44,4 @@
 import org.openstreetmap.josm.io.UTFInputStreamReader;
 import org.openstreetmap.josm.tools.Predicates;
-import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.XmlObjectParser;
 import org.xml.sax.SAXException;
@@ -227,5 +226,5 @@
                     if (all.contains(tp)) {
                         lastmenuOriginal = tp;
-                        tp = (TaggingPresetMenu) Utils.filter(all, Predicates.<TaggingPreset>equalTo(tp)).iterator().next();
+                        tp = (TaggingPresetMenu) all.stream().filter(Predicates.equalTo(tp)).findFirst().get();
                         lastmenuOriginal.group = null;
                     } else {
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchDialog.java	(revision 10590)
@@ -5,5 +5,4 @@
 
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 
 import org.openstreetmap.josm.Main;
@@ -37,10 +36,5 @@
         setContent(selector, false);
         DataSet.addSelectionListener(selector);
-        selector.setDblClickListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                buttonAction(0, null);
-            }
-        });
+        selector.setDblClickListener(e -> buttonAction(0, null));
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSearchPrimitiveDialog.java	(revision 10590)
@@ -5,5 +5,4 @@
 
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.util.HashSet;
@@ -15,5 +14,4 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.tools.Shortcut;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -71,10 +69,5 @@
         selector = new TaggingPresetSelector(false, false);
         setContent(selector, false);
-        selector.setDblClickListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                buttonAction(0, null);
-            }
-        });
+        selector.setDblClickListener(e -> buttonAction(0, null));
     }
 
@@ -93,5 +86,6 @@
             TaggingPreset preset = selector.getSelectedPresetAndUpdateClassification();
             if (preset != null) {
-                final Set<OsmPrimitive> matching = new HashSet<>(Utils.filter(Main.getLayerManager().getEditDataSet().allPrimitives(), preset));
+
+                final Set<OsmPrimitive> matching = new HashSet<>(Main.getLayerManager().getEditDataSet().getPrimitives(preset));
                 Main.getLayerManager().getEditDataSet().setSelected(matching);
             }
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 10590)
@@ -8,6 +8,4 @@
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -47,5 +45,4 @@
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.gui.widgets.SearchTextResultListPanel;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -189,10 +186,5 @@
             ckOnlyApplicable.setText(tr("Show only applicable to selection"));
             pnChecks.add(ckOnlyApplicable);
-            ckOnlyApplicable.addItemListener(new ItemListener() {
-                @Override
-                public void itemStateChanged(ItemEvent e) {
-                    filterItems();
-                }
-            });
+            ckOnlyApplicable.addItemListener(e -> filterItems());
         } else {
             ckOnlyApplicable = null;
@@ -203,10 +195,5 @@
             ckSearchInTags.setText(tr("Search in tags"));
             ckSearchInTags.setSelected(SEARCH_IN_TAGS.get());
-            ckSearchInTags.addItemListener(new ItemListener() {
-                @Override
-                public void itemStateChanged(ItemEvent e) {
-                    filterItems();
-                }
-            });
+            ckSearchInTags.addItemListener(e -> filterItems());
             pnChecks.add(ckSearchInTags);
         } else {
@@ -247,10 +234,5 @@
 
         final TaggingPreset oldPreset = getSelectedPreset();
-        lsResultModel.setItems(Utils.transform(result, new Utils.Function<PresetClassification, TaggingPreset>() {
-            @Override
-            public TaggingPreset apply(PresetClassification x) {
-                return x.preset;
-            }
-        }));
+        lsResultModel.setItems(Utils.transform(result, x -> x.preset));
         final TaggingPreset newPreset = getSelectedPreset();
         if (!Objects.equals(oldPreset, newPreset)) {
@@ -299,12 +281,6 @@
                     if (!suitable && preset.types.contains(TaggingPresetType.RELATION)
                             && preset.roles != null && !preset.roles.roles.isEmpty()) {
-                        final Predicate<Role> memberExpressionMatchesOnePrimitive = new Predicate<Role>() {
-                            @Override
-                            public boolean evaluate(Role object) {
-                                return object.memberExpression != null
-                                        && Utils.exists(selectedPrimitives, object.memberExpression);
-                            }
-                        };
-                        suitable = Utils.exists(preset.roles.roles, memberExpressionMatchesOnePrimitive);
+                        suitable = preset.roles.roles.stream().anyMatch(
+                                object -> object.memberExpression != null && Utils.exists(selectedPrimitives, object.memberExpression));
                         // keep the preset to allow the creation of new relations
                     }
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 10590)
@@ -15,6 +15,5 @@
 import org.openstreetmap.josm.gui.MenuScroller;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
-import org.openstreetmap.josm.tools.Predicate;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -108,10 +107,5 @@
     public static Collection<TaggingPreset> getMatchingPresets(final Collection<TaggingPresetType> t,
                                                                final Map<String, String> tags, final boolean onlyShowable) {
-        return Utils.filter(getTaggingPresets(), new Predicate<TaggingPreset>() {
-            @Override
-            public boolean evaluate(TaggingPreset object) {
-                return object.matches(t, tags, onlyShowable);
-            }
-        });
+        return SubclassFilteredCollection.filter(getTaggingPresets(), preset -> preset.matches(t, tags, onlyShowable));
     }
 
@@ -125,10 +119,5 @@
      */
     public static Collection<TaggingPreset> getMatchingPresets(final OsmPrimitive primitive) {
-        return Utils.filter(getTaggingPresets(), new Predicate<TaggingPreset>() {
-            @Override
-            public boolean evaluate(TaggingPreset object) {
-                return object.evaluate(primitive);
-            }
-        });
+        return SubclassFilteredCollection.filter(getTaggingPresets(), preset -> preset.evaluate(primitive));
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 10590)
@@ -21,4 +21,5 @@
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.stream.Collectors;
 
 import javax.swing.ImageIcon;
@@ -365,15 +366,9 @@
     public Collection<String> getDisplayValues() {
         initListEntries();
-        return Utils.transform(lhm.values(), new Utils.Function<PresetListEntry, String>() {
-            @Override
-            public String apply(PresetListEntry x) {
-                return x.getDisplayValue(true);
-            }
-        });
+        return lhm.values().stream().map(x -> x.getDisplayValue(true)).collect(Collectors.toList());
     }
 
     @Override
     public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
-
         initListEntries();
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/KeyedItem.java	(revision 10590)
@@ -8,4 +8,5 @@
 import java.util.HashMap;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.SortedSet;
 import java.util.TreeSet;
@@ -92,21 +93,44 @@
     }
 
+    /**
+     * Usage information on a
+     */
     protected static class Usage {
-        public SortedSet<String> values; // NOSONAR
+        /**
+         * A set of values that were used for this key.
+         */
+        public final SortedSet<String> values = new TreeSet<>();; // NOSONAR
         private boolean hadKeys;
         private boolean hadEmpty;
 
+        /**
+         * Check if there is exactly one value for this key.
+         * @return <code>true</code> if there was exactly one value.
+         */
         public boolean hasUniqueValue() {
             return values.size() == 1 && !hadEmpty;
         }
 
+        /**
+         * Check if this key was not used in any primitive
+         * @return <code>true</code> if it was unused.
+         */
         public boolean unused() {
             return values.isEmpty();
         }
 
+        /**
+         * Get the first value available.
+         * @return The first value
+         * @throws NoSuchElementException if there is no such value.
+         */
         public String getFirst() {
             return values.first();
         }
 
+        /**
+         * Check if we encountered any primitive that had any keys
+         * @return <code>true</code> if any of the primtives had any tags.
+         */
         public boolean hadKeys() {
             return hadKeys;
@@ -116,5 +140,4 @@
     protected static Usage determineTextUsage(Collection<OsmPrimitive> sel, String key) {
         Usage returnValue = new Usage();
-        returnValue.values = new TreeSet<>();
         for (OsmPrimitive s : sel) {
             String v = s.get(key);
@@ -132,7 +155,5 @@
 
     protected static Usage determineBooleanUsage(Collection<OsmPrimitive> sel, String key) {
-
         Usage returnValue = new Usage();
-        returnValue.values = new TreeSet<>();
         for (OsmPrimitive s : sel) {
             String booleanValue = OsmUtils.getNamedOsmBoolean(s.get(key));
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetLink.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetLink.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetLink.java	(revision 10590)
@@ -6,4 +6,5 @@
 import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
 
 import javax.swing.JLabel;
@@ -17,6 +18,4 @@
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.Predicate;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -32,12 +31,8 @@
     public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel, boolean presetInitiallyMatches) {
         final String presetName = preset_name;
-        final TaggingPreset t = Utils.filter(TaggingPresets.getTaggingPresets(), new Predicate<TaggingPreset>() {
-            @Override
-            public boolean evaluate(TaggingPreset object) {
-                return presetName.equals(object.name);
-            }
-        }).iterator().next();
-        if (t == null)
+        Optional<TaggingPreset> found = TaggingPresets.getTaggingPresets().stream().filter(preset -> presetName.equals(preset.name)).findFirst();
+        if (!found.isPresent())
             return false;
+        TaggingPreset t = found.get();
         JLabel lbl = new TaggingPresetLabel(t);
         lbl.addMouseListener(new MouseAdapter() {
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java	(revision 10589)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Text.java	(revision 10590)
@@ -7,6 +7,4 @@
 import java.awt.GridBagLayout;
 import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.text.NumberFormat;
 import java.text.ParseException;
@@ -143,10 +141,5 @@
                     final int buttonvalue = (NumberFormat.getIntegerInstance().parse(ai.replace("+", ""))).intValue();
                     if (auto_increment_selected == buttonvalue) aibutton.setSelected(true);
-                    aibutton.addActionListener(new ActionListener() {
-                        @Override
-                        public void actionPerformed(ActionEvent e) {
-                            auto_increment_selected = buttonvalue;
-                        }
-                    });
+                    aibutton.addActionListener(e -> auto_increment_selected = buttonvalue);
                     pnl.add(aibutton, GBC.std());
                 } catch (ParseException x) {
@@ -167,10 +160,7 @@
             releasebutton.setMargin(new Insets(0, 0, 0, 0));
             releasebutton.setFocusable(false);
-            releasebutton.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    auto_increment_selected = 0;
-                    clearbutton.setSelected(true);
-                }
+            releasebutton.addActionListener(e -> {
+                auto_increment_selected = 0;
+                clearbutton.setSelected(true);
             });
             saveHorizontalSpace(releasebutton);
