1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.commons.lang3.compare;
19
20 import java.io.Serializable;
21 import java.util.Comparator;
22
23 /**
24 * Compares Object's {@link Object#toString()} values.
25 *
26 * This class is stateless.
27 *
28 * @since 3.10
29 */
30 public final class ObjectToStringComparator implements Comparator<Object>, Serializable {
31
32 /**
33 * The singleton instance.
34 *
35 * This class is stateless.
36 */
37 public static final ObjectToStringComparator INSTANCE = new ObjectToStringComparator();
38
39 /**
40 * For {@link Serializable}.
41 */
42 private static final long serialVersionUID = 1L;
43
44 /**
45 * Constructs a new instance.
46 *
47 * @deprecated Will be private in 4.0.0.
48 */
49 @Deprecated
50 public ObjectToStringComparator() {
51 // empty
52 }
53
54 @Override
55 public int compare(final Object o1, final Object o2) {
56 if (o1 == o2) {
57 return 0;
58 }
59 if (o1 == null) {
60 return 1;
61 }
62 if (o2 == null) {
63 return -1;
64 }
65 final String string1 = o1.toString();
66 final String string2 = o2.toString();
67 // No guarantee that toString() returns a non-null value, despite what Spotbugs thinks.
68 if (string1 == string2) {
69 return 0;
70 }
71 if (string1 == null) {
72 return 1;
73 }
74 if (string2 == null) {
75 return -1;
76 }
77 return string1.compareTo(string2);
78 }
79 }