CollectionUtils.lastElement for common Set/List extraction
Issue: SPR-16374
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -24,6 +24,8 @@ import joptsimple.OptionSet;
|
||||
import joptsimple.OptionSpec;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* {@link CommandLinePropertySource} implementation backed by a JOpt {@link OptionSet}.
|
||||
@@ -86,13 +88,13 @@ public class JOptCommandLinePropertySource extends CommandLinePropertySource<Opt
|
||||
public String[] getPropertyNames() {
|
||||
List<String> names = new ArrayList<>();
|
||||
for (OptionSpec<?> spec : this.source.specs()) {
|
||||
List<String> aliases = new ArrayList<>(spec.options());
|
||||
if (!aliases.isEmpty()) {
|
||||
String lastOption = CollectionUtils.lastElement(spec.options());
|
||||
if (lastOption != null) {
|
||||
// Only the longest name is used for enumerating
|
||||
names.add(aliases.get(aliases.size() - 1));
|
||||
names.add(lastOption);
|
||||
}
|
||||
}
|
||||
return names.toArray(new String[names.size()]);
|
||||
return StringUtils.toStringArray(names);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -29,6 +29,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
@@ -312,6 +313,48 @@ public abstract class CollectionUtils {
|
||||
return candidate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the last element of the given Set, using {@link SortedSet#last()}
|
||||
* or otherwise iterating over all elements (assuming a linked set).
|
||||
* @param set the Set to check (may be {@code null} or empty)
|
||||
* @return the last element, or {@code null} if none
|
||||
* @since 5.0.3
|
||||
* @see SortedSet
|
||||
* @see LinkedHashMap#keySet()
|
||||
* @see java.util.LinkedHashSet
|
||||
*/
|
||||
@Nullable
|
||||
public static <T> T lastElement(@Nullable Set<T> set) {
|
||||
if (isEmpty(set)) {
|
||||
return null;
|
||||
}
|
||||
if (set instanceof SortedSet) {
|
||||
return ((SortedSet<T>) set).last();
|
||||
}
|
||||
|
||||
// Full iteration necessary...
|
||||
Iterator<T> it = set.iterator();
|
||||
T last = null;
|
||||
while (it.hasNext()) {
|
||||
last = it.next();
|
||||
}
|
||||
return last;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the last element of the given List, accessing the highest index.
|
||||
* @param list the List to check (may be {@code null} or empty)
|
||||
* @return the last element, or {@code null} if none
|
||||
* @since 5.0.3
|
||||
*/
|
||||
@Nullable
|
||||
public static <T> T lastElement(@Nullable List<T> list) {
|
||||
if (isEmpty(list)) {
|
||||
return null;
|
||||
}
|
||||
return list.get(list.size() - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Marshal the elements from the given enumeration into an array of the given type.
|
||||
* Enumeration elements must be assignable to the type of the given array. The array
|
||||
|
||||
Reference in New Issue
Block a user