Geração de Stream com dados de arquivos:

Exemplo de como gerar um Stream com as linhas de arquivos em um diretório:

Stream strings = Files.list(Paths.get("./br/com/casadocodigo/java8"))
.filter(p -> p.toString().endsWith(".java"))
.flatMap(p -> lines(p));

Exemplo: ListaArqDir .java

Contagem de linhas de cada arquivo:

Para contar as linhas de cada arquivo, usa-se mapToLong para contar o número de linhas de cada arquivo:

LongStream lines = Files.list(Paths.get("./br/com/casadocodigo/java8"))
.filter(p -> p.toString().endsWith(".java"))
.mapToLong(p -> lines(p).count());

Exemplo: ListaNumLinhas.java

Para gerar uma lista com os valores:

List lines = Files.list(Paths.get("./br/com/casadocodigo/java8"))
.filter(p -> p.toString().endsWith(".java"))
.map(p -> lines(p).count())
.collect(Collectors.toList());

Exemplo: ListaValores.java

Gerando um mapa com os arquivos e suas respectivas contagens de linhas:

Exemplo de uso de forEach para popular um Map com o caminho do arquivo e a quantidade de linhas:

Map linesPerFile = new HashMap<>();
Files.list(Paths.get("./br/com/casadocodigo/java8"))
.filter(p -> p.toString().endsWith(".java"))
.forEach(p -> linesPerFile.put(p, lines(p).count()));

Observação: O uso de forEach pode gerar efeito colateral ao modificar uma variável externa. Quando você usa uma variável externa dentro de um lambda no forEach e a modifica, isso gera um efeito colateral.

Exemplo: CaminhoLinhas.java

Uso de toMap para criar um mapa de forma mais funcional:

Usando o coletor toMap para evitar o efeito colateral do forEach:

Map lines = Files.list(Paths.get("./br/com/casadocodigo/java8"))
.filter(p -> p.toString().endsWith(".java"))
.collect(Collectors.toMap(
p -> p,
p -> lines(p).count()
));

Exemplo: CaminhoLinhasFuncional.java

Criando um mapa de arquivos e seu conteúdo:

Gerando um Map> com a lista de linhas de cada arquivo:

Map> content = Files.list(Paths.get("./br/com/casadocodigo/java8"))
.filter(p -> p.toString().endsWith(".java"))
.collect(Collectors.toMap(
Function.identity(),
p -> lines(p).collect(Collectors.toList())
));

Exemplo: ArquivoMap.java

Exemplo de uso de toMap com usuários:

Gerando um mapa com o nome do usuário como chave:

Map nameToUser = usuarios.stream()
.collect(Collectors.toMap(
Usuario::getNome,
Function.identity()
));

Exemplo: NameToUser.java

Para entidades JPA, utilizando o id como chave:

Map nameToUser = usuarios.stream()
.collect(Collectors.toMap(
Usuario::getId,
Function.identity()
));

Exemplo: NameToUserJPA.java