GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • java.evolved

This view

  • Original page
  • New address

GeezerVison is showing javaevolved.dev — Collections — java.evolved

Home / Topics / Collections
🏷 Collections 16 patterns

Topic: Collections

All Java patterns related to Collections — java.evolved

Language

Raw collections to generic types

Old List names = new ArrayList(); names.add("Duke"); String name = (String) names.get(0);
Modern List<String> names = new ArrayList(); names.add("Duke"); String name = names.get(0);
hover to see modern →
JDK 5+ learn more →
Collections

Immutable list creation

Old List<String> list = Collections.unmodifiableList( new ArrayList<>( Arrays.asList("a", "b", "c") ) );
Modern List<String> list = List.of("a", "b", "c");
hover to see modern →
JDK 9+ learn more →
Collections

Immutable map creation

Old Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map = Collections.unmodifiableMap(map);
Modern Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3);
hover to see modern →
JDK 9+ learn more →
Collections

Immutable set creation

Old Set<String> set = Collections.unmodifiableSet( new HashSet<>( Arrays.asList("a", "b", "c") ) );
Modern Set<String> set = Set.of("a", "b", "c");
hover to see modern →
JDK 9+ learn more →
Collections

Copying collections immutably

Old List<String> copy = Collections.unmodifiableList( new ArrayList<>(original) );
Modern List<String> copy = List.copyOf(original);
hover to see modern →
JDK 10+ learn more →
Collections

Map.entry() factory

Old Map.Entry<String, Integer> e = new AbstractMap.SimpleEntry<>( "key", 42 );
Modern var e = Map.entry("key", 42);
hover to see modern →
JDK 9+ learn more →
Collections

Sequenced collections

Old // Get last element Object last = list.get(list.size() - 1); // Get first Object first = list.get(0); // Reverse iteration: manual
Modern var last = list.getLast(); var first = list.getFirst(); var reversed = list.reversed();
hover to see modern →
JDK 21+ learn more →
Collections

Typed stream toArray

Old List<String> list = getNames(); List<String> filtered = new ArrayList<>(); for (String n : list) { if (n.length() > 3) { filtered.add(n); } } String[] arr = filtered.toArray(new String[0]);
Modern String[] arr = getNames().stream() .filter(n -> n.length() > 3) .toArray(String[]::new);
hover to see modern →
JDK 8+ learn more →
Collections

Reverse list iteration

Old for (ListIterator<String> it = list.listIterator(list.size()); it.hasPrevious(); ) { String element = it.previous(); System.out.println(element); }
Modern for (String element : list.reversed()) { IO.println(element); }
hover to see modern →
JDK 21+ learn more →
Collections

Unmodifiable collectors

Old List<String> list = stream.collect( Collectors.collectingAndThen( Collectors.toList(), Collections::unmodifiableList ) );
Modern List<String> list = stream.toList();
hover to see modern →
JDK 16+ learn more →
Collections

Legacy synchronized collections to modern alternatives

Old Hashtable<String, Session> sessions = new Hashtable<>(); sessions.put(id, session);
Modern ConcurrentMap<String, Session> sessions = new ConcurrentHashMap<>(); sessions.put(id, session);
hover to see modern →
JDK 5+ learn more →
Collections

Atomic map updates with compute and merge

Old List<String> values = groups.get(key); if (values == null) { values = new ArrayList<>(); groups.put(key, values); } values.add(value);
Modern groups.computeIfAbsent(key, ignored -> new ArrayList<>()) .add(value);
hover to see modern →
JDK 8+ learn more →
Collections

Stack to Deque and ArrayDeque

Old Stack<String> stack = new Stack<>(); stack.push("task"); String next = stack.pop();
Modern Deque<String> stack = new ArrayDeque<>(); stack.push("task"); String next = stack.pop();
hover to see modern →
JDK 6+ learn more →
Collections

Collection bulk operations instead of mutation loops

Old for (Iterator<Order> it = orders.iterator(); it.hasNext();) { if (it.next().cancelled()) { it.remove(); } }
Modern orders.removeIf(Order::cancelled);
hover to see modern →
JDK 8+ learn more →
Collections

Comparator factories and fluent ordering

Old people.sort(new Comparator<Person>() { @Override public int compare(Person a, Person b) { int byName = a.name().compareTo(b.name()); return byName != 0 ? byName : Integer.compare(a.age(), b.age()); } });
Modern people.sort(Comparator.comparing(Person::name) .thenComparingInt(Person::age));
hover to see modern →
JDK 8+ learn more →
Streams

Stream.toList()

Old List<String> result = stream .filter(s -> s.length() > 3) .collect(Collectors.toList());
Modern List<String> result = stream .filter(s -> s.length() > 3) .toList();
hover to see modern →
JDK 16+ learn more →
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.