removed unnecessary compare method
declared all moving parts as final
changed some stuff to use Streams and Lambdas instead of a ArrayList