/* * [MXComparator.java] * * Summary: Sort mail MX Strings. * * Copyright: (c) 2002-2017 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.7 2007-08-21 */ package com.mindprod.bulk; import java.util.Comparator; /** * Sort mail MX Strings. *

* Defines an alternate sort order for String. * * @author Roedy Green, Canadian Mind Products * @version 1.7 2007-08-21 initial release * @since 2002 */ class MXComparator implements Comparator { /** * Sort mailMX Strings, number space String. "5 gmail-smtp-in.l.google.com." "10 alt1.gmail-smtp-in.l.google.com." * Defines an alternate sort order for String. * Compare two String Objects. * Informally, returns (a-b), or +ve if a is more positive than b. * * @param a first String to compare * @param b second String to compare * * @return +ve if a>b, 0 if a==b, -ve if a<b */ public final int compare( String a, String b ) { // very inefficient, parses on every compare!!!! try { final int space1 = a.indexOf( ' ' ); final int space2 = b.indexOf( ' ' ); if ( space1 > 0 && space2 > 0 ) { final int prio1 = Integer.parseInt( a.substring( 0, space1 ) ); final int prio2 = Integer.parseInt( b.substring( 0, space2 ) ); if ( prio1 > prio2 ) { return -1; } if ( prio1 < prio2 ) { return 1; } // numbers were equal, break tie with strings a = a.substring( space1 + 1 ); b = b.substring( space2 + 1 ); return a.compareTo( b ); } else { // were no lead numbers. return a.compareTo( b ); } } catch ( NumberFormatException e ) { // screwed up numbers, compare alphabetically. return a.compareTo( b ); } } }