import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import static java.util.Map.entry;

public final class Main {

    private static final Map<String, Runnable> COMMAND_MAP = Map.ofEntries(
            entry("help", () -> printHelp()),
            entry("quit", () -> exitProgram()),
            entry("shutdown", () -> shutdownSystem()));

    private static void printHelp() {
        System.out.println("printHelp");
    }

    private static void exitProgram() {
        System.out.println("exitProgram");
    }

    private static void shutdownSystem() {
        System.out.println("shutdownSystem");
    }

    private static List<String> getCommandList() {
        return List.of("help", "reboot", "shutdown");
    }

    private static void fixMe() {
        var list = getCommandList().stream()
            .flatMap(n -> Optional.ofNullable(COMMAND_MAP.get(n)).stream())
            .collect(Collectors.toList());

        // The next is also fine, but the number of elements differs:
        //
        // var list = getCommandList().stream()
		//     .map(n -> COMMAND_MAP.getOrDefault(n, () -> {}))
        //     .collect(Collectors.toList());

        list.forEach(r -> r.run());
    }

    public static void main(String[] args) {
        fixMe();
    }
}
