https://blog.devgenius.io/java-functional-interfaces-simplifying-your-code-with-power-and-flexibility-c4af4c2d5c8a