Habilidades comuns de Stream em Java8

Em Java 8, a operação de fluxo de dados Stream simplifica muito a operação de coleta. Depois de aprender o Stream, podemos realizar muitas operações na coleção sem o loop for.

Inicialização do Stream

Todas as operações de fluxo em Java são para objetos de fluxo, portanto, você deve inicializar para que os objetos do tipo Fluxo usem Fluxo:

  • Inicialização do fluxo:

    Stream stream = Stream.of("a","b","c");
    
  • Converta a matriz em um fluxo:

    String [] strArray = new String[]{
          
          "a","b","c"};
    Stream stream = Stream.of(strArray);
    //或者
    Stream stream = Arrays.stream(strArray);
    
  • O objeto da coleção é convertido em um fluxo:

    List<String> list = Arrays.asList(strArray);
    stream = list.stream();
    

Operação de fluxo

1. Operação transversal (mapa)

Use a operação de mapa para percorrer cada objeto na coleção e operar nele;

Após a operação do mapa, .collect(Collectors.toList())o conjunto após a operação pode ser obtido usando -o.

por exemplo:

//1.1 遍历并转换为大写
List<String> output = wordList.stream()
    .map(String::toUpperCase)
    .collect(Collectors.toList());

//1.2 对每个元素进行平方计算
List<Integer> nums = Arrays.asList(1,2,3,4);
List<Integer> squareNums = nums.stream()
    .map(n->n*n)
    .collect(Collectors.toList());

2. Operação de filtragem (filtro)

O filtro pode ser usado para filtrar os elementos de dados no fluxo e os elementos filtrados serão retidos para gerar um novo fluxo.

List<String> filterLists = new ArrayList<>();
filterLists.add("");
filterLists.add("a");
filterLists.add("b");
List afterFilterLists = filterLists.stream()
    .filter(s->!s.isEmpty())
    .collect(Collectors.toList());

3. Operação de loop (forEach)

Para operações personalizadas em cada objeto no Stream , você pode usar forEach:

List<String> forEachLists = new ArrayList<>();

forEachLists.add("a");
forEachLists.add("b");
forEachLists.add("c");

forEachLists.stream().forEach(s->System.out.println(s));

4. Retorne um conjunto de resultados específico (limite / pulo)

  • limit retorna os primeiros n elementos do fluxo
  • pular é pular os primeiros n elementos
List<String> forEachLists = new ArrayList<>();

forEachLists.add("a");
forEachLists.add("b");
forEachLists.add("c");
forEachLists.add("d");
forEachLists.add("e");
forEachLists.add("f");

List<String> limitLists = forEachLists.stream()
    .skip(2)
    .limit(3)
    .collect(Collectors.toList());
//先跳过前2个元素
//再取Stream剩余元素的前3,生成新的Stream并返回

5. Classificar (classificar / mínimo / máximo / distinto)

  • sort pode classificar todos os elementos da coleção.
  • max, min pode encontrar o maior / menor elemento no Stream.
  • Distinct pode descobrir os elementos únicos.
//1.对集合排序
List<Integer> sortLists = new ArrayList<>();
sortLists.add(1);
sortLists.add(4);
sortLists.add(6);
sortLists.add(3);
sortLists.add(2);

List<Integer> afterSortLists = sortLists.stream()
    .sorted((In1,In2)->In1-In2)
    .collect(Collectors.toList());

//2.获取最大长度的元素
List<String> maxLists = new ArrayList<>();
maxLists.add("a");
maxLists.add("b");
maxLists.add("c");
maxLists.add("d");
maxLists.add("e");
maxLists.add("f");
maxLists.add("hahaha");

int maxLength = maxLists.stream()  //获取列表中最长元素的长度
    .mapToInt(s->s.length())
    .max().getAsInt();

//3.对集合进行查重
List<String> distinctList = new ArrayList<>();
distinctList.add("a");
distinctList.add("a");
distinctList.add("c");
distinctList.add("d");

List<String> afterDistinctList = distinctList.stream()
    .distinct()//去重
    .collect(Collectors.toList())

6. Correspondência (relacionada à correspondência)

Às vezes, precisamos determinar se todas as condições no conjunto atendem às condições, ou se há elementos que atendem às condições no conjunto, então podemos usar o método de correspondência:

  • allMatch: Todos os elementos no stream são adicionados ao predicado passado e retornam true;
  • anyMatch: Qualquer elemento no Stream corresponde ao predicado de entrada e retorna verdadeiro;
  • noneMatch: Se não houver nenhum elemento no Stream que corresponda ao predicado passado, retorna true;
List<String> matchList = new ArrayList<>();
matchList.add("a");
matchList.add("");
matchList.add("a");
matchList.add("c");
matchList.add("d");

//1.判断集合中是否存在“c”的字符串元素
Boolean isExits = matchList.stream()
    .anyMatch(s->s.equals("c"));


//2.判断集合中是否全不为空
Boolean isAllNull = matchList.stream()
    .allMatch(s->s.isNotEmpty());

Boolean isAllNull2 = matchList.stream()
    .noneMatch(s->s.isEmpty());

Acho que você gosta

Origin blog.csdn.net/weixin_40849588/article/details/107634546
Recomendado
Clasificación