News for hackers. Stuff that matters.
Re:Java for Everything by blazespin on Sunday November 30, 2014 @05:15PM (#8678387)
I suspect readability isn't a big priority for you.

Here's how I'd write this, lambdas or not:

public static List<Integer> sortDescending(List<Integer> ints) {

      ints.sort(new Comparator<Integer>() {
          @Override
          public int compare(Integer o1, Integer o2) {
              if (o1.equals(o2)) {
                return 0;
              } else if (o1 < o2) {
                return 1; 
              } else { 
                return -1;
              }
          }
      });

      return ints;
  }
My personal perspective is that your use is a typical abuse which turns simple code into something unreadable and overly complex. This makes code hard to maintain and buggy. Not to mention, it's nigh impossible to step through in a debugger..
Re:Java for Everything by twic on Sunday November 30, 2014 @06:23PM (#8678645)
I'll meet you halfway:

      ints.sort((o1, o2) -> {
          if (o1.equals(o2)) {
            return 0;
          } else if (o1 < o2) {
            return 1; 
          } else { 
            return -1;
          }
      });
Or may i suggest a version with a guard clause and a simple ternary:

      ints.sort((o1, o2) -> {
          if (o1.equals(o2)) return 0;
          return (o1 < o2) ? 1 : -1;
      });
There's definitely no need for the 'new Comparator' boilerplate any more. That's not the kind of verbosity that adds clarity; it's just ceremony.
Re:Java for Everything by msluyter on Sunday November 30, 2014 @05:44PM (#8678499)
shrug. This seems like a pretty standard use of the ternary operator to me. I mean, just google examples of Comparator, and you'll find tons of examples like this:

   @Override
   public int compareTo(Object arg0) {
       Country country=(Country) arg0;
       return (this.countryId < country.countryId ) ? -1:
              (this.countryId > country.countryId ) ? 1:0 ;

   }
(http://www.javacodegeeks.com/2013/03/difference-between-comp...)

But that's orthogonal to my point, which is that lambdas offer significant improvements to readability because they remove the irrelevant cruft and simplify the code.

Re:Java for Everything by jbergens on Tuesday December 02, 2014 @06:31AM (#8686612)
And lambdas (or similar) has existed in C#, Python, Scala, Javascript and other languages for years. I still thinks this means that those languages has had large benefits compared to Java (7 and older). Now that Java 8 has lambdas even Java developers can learn to write better and more readable code. I also thinks that Java 8 is good enough for most projects now but Java 7 wasn't. Just my thinking.
Re:Java for Everything by Igglyboo on Sunday November 30, 2014 @06:34PM (#8678680)
I'd have to agree, the GP is very bloated when a simple ternary will suffice.
Re:Java for Everything by x0x0 on Sunday November 30, 2014 @06:41PM (#8678701)
one line is way more readable than 7 lines taking up valuable vertical and brain space

it could also be accomplished with

    return -1 * o1.compareTo(o2);
Re:Java for Everything by adiM on Sunday November 30, 2014 @06:49PM (#8678733)
Why not:

    return o2.compareTo(o1);
Re:Java for Everything by x0x0 on Sunday November 30, 2014 @07:58PM (#8678969)
because the o2 vs o1 is easy to miss, while the -1 makes it obvious i'm intentionally reversing. my .02
Re:Java for Everything by fyolnish on Sunday November 30, 2014 @08:49PM (#8679105)
Not if you give them more descriptive names
Re:Java for Everything by cdman on Monday December 01, 2014 @02:46AM (#8679917)
No, you can't. In particular -1 * Integer.MIN_VALUE == Integer.MIN_VALUE.
Re:Java for Everything by organsnyder on Friday December 05, 2014 @03:36PM (#8706745)
That would probably never matter in practice, though—I've rarely seen compareTo() return anything other than -1, 0, or 1; certainly never anything approaching MAX/MIN_VALUE. Still, bravo for considering all of the edge cases.