Em Java, Stream
é uma API de operação de streaming para processar dados de coleta. Ele fornece uma maneira concisa, flexível e eficiente de realizar diversas operações em coleções, como filtragem, mapeamento, classificação, etc. Aqui estão algumas Stream
funções comuns e exemplos de código detalhados:
-
Criar fluxo:
-
Criar um fluxo a partir de uma coleção:
stream()
o método pode criar um fluxo a partir de uma coleção.List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = numbers.stream();
-
Criar fluxo a partir de um array:
Arrays.stream()
o método pode criar um fluxo a partir de um array.int[] array = { 1, 2, 3, 4, 5}; IntStream stream = Arrays.stream(array);
-
Use
Stream.of()
Create Stream: você pode usarStream.of()
o método para criar um stream contendo elementos especificados.Stream<String> stream = Stream.of("a", "b", "c");
-
-
filtro:
- Use
filter()
métodos para filtrar elementos em um fluxo, retendo apenas os elementos que atendem a uma determinada condição.List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0);
- Use
-
Mapeamento:
- Use
map()
métodos para converter elementos no fluxo.List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); Stream<Integer> nameLengths = names.stream().map(String::length);
- Use
-
Ordenar por:
- Use
sorted()
métodos para classificar elementos em um fluxo.List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2); Stream<Integer> sortedNumbers = numbers.stream().sorted();
- Use
-
coletar:
- Use
collect()
métodos para coletar elementos de um fluxo em uma coleção.List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
- Use
-
Estatisticas:
- Use
count()
o método para obter o número de elementos no fluxo.List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); long count = numbers.stream().count();
- Use
-
corresponder:
-
Use
anyMatch()
um método para determinar se existe um elemento no fluxo que atenda a uma determinada condição.List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); boolean hasEvenNumber = numbers.stream().anyMatch(n -> n % 2 == 0);
-
Use
allMatch()
um método para determinar se todos os elementos do fluxo satisfazem uma determinada condição.List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); boolean allEvenNumbers = numbers.stream().allMatch(n -> n % 2 == 0);
-
Use
noneMatch()
um método para determinar se não há elementos no fluxo que atendam a uma determinada condição.List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); boolean noNegativeNumbers = numbers.stream().noneMatch(n -> n < 0);
-
-
Operações de agrupamento e operações de classificação após agrupamento:
-
Suponha que temos uma lista contendo objetos de estudante, cada objeto de estudante contém atributos de nome e idade. Queremos agrupar os alunos por idade e, dentro de cada grupo, classificar por nome.
-
Primeiro, definimos uma
Student
classe para representar o objeto aluno:
-
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
- Em seguida, criamos uma lista de alunos e realizamos operações de agrupamento e classificação:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Alice", 20),
new Student("Bob", 18),
new Student("Charlie", 20),
new Student("David", 19),
new Student("Eve", 18)
);
// 按照年龄进行分组,并在每个组内按照姓名进行排序
Map<Integer, List<Student>> groupedAndSorted = students.stream()
.sorted(Comparator.comparing(Student::getName)) // 按照姓名排序
.collect(Collectors.groupingBy(Student::getAge)); // 按照年龄分组
// 输出分组和排序结果
groupedAndSorted.forEach((age, group) -> {
System.out.println("Age: " + age);
group.forEach(student -> System.out.println(" " + student.getName()));
});
}
}
- A execução do código acima produzirá os seguintes resultados:
Age: 18
Bob
Eve
Age: 19
David
Age: 20
Alice
Charlie
- No código, usamos
sorted()
o método para ordenar a lista de alunos por nome em ordem crescente. Em seguida, utilizegroupingBy()
o método para agrupar os alunos por idade, retornando umMap
onde as chaves são as idades e os valores são uma lista de alunos com a mesma idade. Finalmente, iteramosMap
e produzimos os resultados.
Recomende um canal para usar o ChatGPT: clique para ir diretamente