Solution for Java 8 based on java.util.Comparator.comparing(...):
Comparator<String> c = Comparator.comparing(String::toString);
or
Comparator<String> c = Comparator.comparing((String x) -> x);
Answer from Anthony on Stack OverflowSolution for Java 8 based on java.util.Comparator.comparing(...):
Comparator<String> c = Comparator.comparing(String::toString);
or
Comparator<String> c = Comparator.comparing((String x) -> x);
You may write your own comparator
public class ExampleComparator implements Comparator<String> {
public int compare(String obj1, String obj2) {
if (obj1 == obj2) {
return 0;
}
if (obj1 == null) {
return -1;
}
if (obj2 == null) {
return 1;
}
return obj1.compareTo(obj2);
}
}
Need help passing a comparator as a parameter
new MySortedLinkedList<String>(Comparator<String>);
When passing a parameter, you need to use an object instance, not an interface/class type. If you must use a comparator (if the MySortedLinkedList class has no support for using the natural ordering of Comparable objects), then you can make a "natural ordering" comparator:
private static class NaturalOrderingComparator<T extends Comparable<T>> implements Comparator<T>
{
private static final Comparator<?> INSTANCE = new NaturalOrderingComparator<String>();
private NaturalOrderingComparator(){} // singleton
public static <U extends Comparable<U>> Comparator<U> getInstance()
{
@SuppressWarnings("unchecked")
Comparator<U> comparator = (Comparator<U>) INSTANCE;
return comparator;
}
public int compare(T a, T b)
{
return a.compareTo(b);
}
}And then use that:
MySortedLinkedList<String> t = new MySortedLinkedList<String>(NaturalOrderingComparator.getInstance());More on reddit.com
It seems that Comparator doesn't work on java stream, while it works with method Collections.sort
Noob Programmer, ELI5: Comparators?
How to properly compare Strings in Java
Videos
I am creating a sorted LinkedList class, and the parameter should be a Comparator. This is my initializing line:
MySortedLinkedList[String] t = new MySortedLinkedList[String] (Comparator[String]);
I am using < in the actual code, but I switched to square brackets because reddit hates them, for some reason. Anyway, when I type that line in, I get this exception in Eclipse:
Syntax error on token ">", Expression expected after this.
How do I fix the error? I do not want to create another comparator when the string one works fine.
new MySortedLinkedList<String>(Comparator<String>);
When passing a parameter, you need to use an object instance, not an interface/class type. If you must use a comparator (if the MySortedLinkedList class has no support for using the natural ordering of Comparable objects), then you can make a "natural ordering" comparator:
private static class NaturalOrderingComparator<T extends Comparable<T>> implements Comparator<T>
{
private static final Comparator<?> INSTANCE = new NaturalOrderingComparator<String>();
private NaturalOrderingComparator(){} // singleton
public static <U extends Comparable<U>> Comparator<U> getInstance()
{
@SuppressWarnings("unchecked")
Comparator<U> comparator = (Comparator<U>) INSTANCE;
return comparator;
}
public int compare(T a, T b)
{
return a.compareTo(b);
}
}
And then use that:
MySortedLinkedList<String> t = new MySortedLinkedList<String>(NaturalOrderingComparator.getInstance());
You need to pass in an instance of a Comparator. You'll need to create you're own instance of Comparator.
But you might like to take advantage of String extending Comparable in your implementation of MySortedLinkedList.