Compétences communes de Stream en Java8

Dans Java 8, l'opération de flux de données Stream simplifie considérablement l'opération de collecte. Après avoir appris Stream, nous pouvons effectuer de nombreuses opérations sur la collection sans la boucle for.

Initialisation du flux

Toutes les opérations Stream en Java concernent les objets Stream, vous devez donc initialiser pour que les objets de type Stream utilisent Stream:

  • Initialisation du flux:

    Stream stream = Stream.of("a","b","c");
    
  • Convertissez le tableau en un flux:

    String [] strArray = new String[]{
          
          "a","b","c"};
    Stream stream = Stream.of(strArray);
    //或者
    Stream stream = Arrays.stream(strArray);
    
  • L'objet de collection est converti en un Stream:

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

Fonctionnement du flux

1. Opération de déplacement (carte)

Utilisez l'opération de carte pour parcourir chaque objet de la collection et opérer dessus;

Après l'opération de carte, .collect(Collectors.toList())l'ensemble après l'opération peut être obtenu en l' utilisant .

par exemple:

//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. Opération de filtrage (filtre)

Le filtre peut être utilisé pour filtrer les éléments de données dans le flux, et les éléments filtrés seront conservés pour générer un nouveau flux.

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. Fonctionnement en boucle (forEach)

Pour les opérations personnalisées sur chaque objet du Stream , vous pouvez utiliser forEach:

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

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

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

4. Renvoie un ensemble de résultats spécifique (limite / saut)

  • limit renvoie les n premiers éléments du Stream
  • skip est de sauter les n premiers éléments
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. Trier (trier / min / max / distinct)

  • sort peut trier tous les éléments de la collection.
  • max, min peut trouver l'élément le plus grand / le plus petit dans le flux.
  • Distinct peut découvrir les éléments uniques.
//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. Matching (lié au match)

Parfois, nous devons déterminer si toutes les conditions de l'ensemble remplissent les conditions, ou s'il existe des éléments qui remplissent les conditions de l'ensemble, nous pouvons alors utiliser la méthode de correspondance:

  • allMatch: tous les éléments du flux sont ajoutés au prédicat transmis et retournent true;
  • anyMatch: tout élément du Stream correspond au prédicat entrant et renvoie true;
  • noneMatch: s'il n'y a aucun élément dans le Stream qui correspond au prédicat passé, renvoie 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());

Je suppose que tu aimes

Origine blog.csdn.net/weixin_40849588/article/details/107634546
conseillé
Classement