[Stream] Uso detalhado de Stream em Java

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 Streamfunções comuns e exemplos de código detalhados:

  1. 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 usar Stream.of()o método para criar um stream contendo elementos especificados.

      Stream<String> stream = Stream.of("a", "b", "c");
      
  2. 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);
      
  3. 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);
      
  4. 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();
      
  5. 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());
      
  6. 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();
      
  7. 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);
      
  8. 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 Studentclasse 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, utilize groupingBy()o método para agrupar os alunos por idade, retornando um Maponde as chaves são as idades e os valores são uma lista de alunos com a mesma idade. Finalmente, iteramos Mape produzimos os resultados.

Recomende um canal para usar o ChatGPT: clique para ir diretamente
Digitalize o código QR para seguir a conta oficial

Acho que você gosta

Origin blog.csdn.net/kkwyting/article/details/133297260
Recomendado
Clasificación