1) Effective Java
This is the first book every intermediate Java developer should read. It's not for beginners, and expert already knows most of the trick buts its absolutely critical for Java developer with a couple of years of experience. This book is your first step towards becoming an expert Java developer.
If you are working in Java for a couple of years and want to move from that advanced level, here are a couple of books to read.
-------------------------------------------
2) Java Concurrency in Practice
3) Java 9 Modularity
4) Definite guide of Java Performance by Scott Oaks
5) Head First Design Pattern
6) Test-Driven
7) Well-grounded Java Developer
8) Java NIO by
9) Java By Comparision
10) Refactoring
11) Modern Java in Action
This is the bonus book but how can you be a Java expert without knowing anything about Java 8 even after 1.5 years or its launch? So you must read this book to get a feel of new Java 8 features and motivation behind them.