Lambdas let you write small functions inline, but very often the function you want already exists as a named method, and writing a lambda that does nothing but call it is noise. Method references are a compact syntax, ClassName::methodName, that points directly at an existing method to be used wherever a functional interface is expected, so list.forEach(System.out::println) replaces list.forEach(x -> System.out.println(x)) with no loss of meaning and a clear gain in readability.
Alongside references, the functional interfaces in java.util.function, Function, Predicate, Consumer, and the rest, expose default methods for composition: you can glue small functions together into larger ones with andThen, compose, and, or, and negate, building behaviour from reusable pieces rather than one monolithic lambda. Composition turns functions into building blocks that snap together.
Understanding method references and composition matters because they are what make functional Java concise and expressive rather than merely possible. They let you name intent (Player::score reads as 'the score of a player'), reuse logic across many call sites, and assemble pipelines declaratively, which is exactly the style the Streams API rewards and which dominates modern Java codebases.