Diamant und var haben vergleichbare Aufgaben, unterscheiden sich aber durch die Quelle der Informationen. Beim Diamanten ist es zum Beispiel bei einer Zuweisung die linke Seite, die dem Compiler die Information gibt, was auf der rechten Seite der Zuweisung für ein Typ gemeint ist. Bei var wiederum ist das anderes herum: die rechte Seite hat den Kontext und daher kann links der Variablentyp entfallen:
List<String> list1 = new ArrayList<>(); // List<String>
var list2 = new ArrayList<String>(); // ArrayList<String>
var list3 = new ArrayList<>(); // ArrayList<Object>
Im letzten Fall gibt es keinen Compilerfehler, nur ist eben nichts bekannt über das Typargument, und daher gilt Object.
Um Code abzukürzen haben wir damit zwei Möglichkeiten: var oder Diamond.