Java for Everything
There's the language and there's the ecosystem. A lot of negative feelings that still linger are, IMHO, directed more at some of the painful historical aspects of the ecosystem: J2EE XML configuration hell, EJBs, bloated application servers, XML for everything, JAX-WS, SOAP, ant, classloader problems, maven dependency hell, 10 different logging libraries, etc... A lot of this stuff truly sucked.But I feel things have improved over time. Dropwizard, gradle, embedded jetty, jersey, guava, Spring boot, etc... The trend is towards minimizing configuration and overall, the ecosystem has become somewhat more manageable. I wouldn't necessarily call it pleasant, but it's better.An as for the language itself, Java8's lambdas + streams provide significant improvements.Compare this (Java 7):  public static List sortDescending(List ints) {

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

      return ints;
  }

to this (Java 8):  public static List sortDescending2(List ints) {

      ints.sort((o1, o2) ->  o1.equals(o2) ? 0 : o1 < o2 ? 1 : -1);

      return ints;
  }

(Example is contrived, since you could use the built in Collections.reverse() to achieve the same result. My main point is that we have eliminated ~4 lines (counting braces) of ceremony.)All that said, I'd rather be using Clojure.