Java 扁平化嵌套集合

Java 扁平化嵌套集合

流是一个支持各种方法的对象序列,这些方法可以通过流水线来产生所需的结果。流被用来按照流水线的方法计算元素,而不改变对象的原始值。而扁平化是指将两个或多个集合合并成一个。考虑下面的例子,我们有一个包括3个数组的数组,但在扁平化效果之后,我们将有一个包含三个数组中所有元素的结果数组。

插图。

输入      : arr1[]  = {{1,2,3,4},{5,6,7},{8,9}}; 
处理 : Flattening
输出     : arr1[]  = {1,2,3,4,5,6,7,8,9};
Java

Stream flatMap()方法用于将一个集合流平铺为一个对象流。这些对象是由原始流中的所有集合组合而成。flatMap()方法是对流中的元素进行一对多的转换,然后将得到的元素平铺到一个新的流中。基本上Stream.flatMap()方法有助于将Stream <Collection>转换为Stream

例子1: 使用flatMap()方法对两个相同类型的数组流进行扁平化处理

// Java Program to Flatten a map containing a list of items
// as values using flatMap() method
 
// Importing input output classes
import java.io.*;
// Importing desired classes from java.util package
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
// Main class
public class GFG {
 
    // Method 1
    // To flatten a map containing a list of items as values
    public static <T> Stream<T>
    flatten(Collection<List<T> > values)
    {
 
        // Stream.flatMap() method converts
        // Stream<Collection<T>> to the  Stream<T>
        Stream<T> stream
            = values.stream().flatMap(x -> x.stream());
 
        // Return the desired stream
        return stream;
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an object of Map class
        // Declaring object of integer and string type
        Map<Integer, List<String> > map = new HashMap<>();
 
        // Adding elements to the above Map object
        // Custom input entries
        map.put(1, Arrays.asList("1", "2", "3"));
        map.put(2, Arrays.asList("4", "5", "6"));
 
        // Creating a List class object holding all elements
        // after flattening
        List<String> s = flatten(map.values())
                             .collect(Collectors.toList());
 
        // Print and display the above List object
        System.out.println(s);
    }
}
Java

输出

[A, B, C, i, J, K]
Java

例子2: 扁平化两个相同类型的列表流

// Java Program to flatten a stream of same type two arrays
// using flatMap() method
 
// Importing input output classes
import java.io.*;
// Importing Arrays and Stream classes
// from java.util package
import java.util.Arrays;
import java.util.stream.Stream;
 
// Main class
class GFG {
   
    // Method 1
    //  To flatten a stream of two arrays of the same type
    public static <T> Stream<T> flatten(T[] a, T[] b)
    {
        // Stream.flatMap() method converts
        // Stream<Collection<T>> to the  Stream<T>
        Stream<T> stream
            = Stream.of(a, b).flatMap(Arrays::stream);
 
        // Returns the desired stream
        return stream;
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Input array of strings
 
        // Array 1 has uppercase characters
        String[] a = { "A", "B", "C" };
 
        // Array 2 has lowercase characters
        String[] b = { "i", "J", "K" };
          
        // Calling the above method in the main() method
        String[] s = flatten(a, b).toArray(String[] ::new);
 
        // Return string representation of contents
        // of integer array
        System.out.println(Arrays.toString(s));
    }
}
Java

输出

[Ma, Rs, Xy, Jw, Pi, Br]
Java

例子3: 使用flatMap()方法对包含项目列表的地图进行扁平化处理,作为数值。

// Java Program to Flatten a map containing a list of items
// as values using flatMap() method
 
// Importing input output classes
import java.io.*;
// Importing desired classes from java.util package
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
// Main class
public class GFG {
 
    // Method 1
    // To flatten a map containing a list of items as values
    public static <T> Stream<T>
    flatten(Collection<List<T> > values)
    {
 
        // Stream.flatMap() method converts
        // Stream<Collection<T>> to the  Stream<T>
        Stream<T> stream
            = values.stream().flatMap(x -> x.stream());
 
        // Return the desired stream
        return stream;
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an object of Map class
        // Declaring object of integer and string type
        Map<Integer, List<String> > map = new HashMap<>();
 
        // Adding elements to the above Map object
        // Custom input entries
        map.put(1, Arrays.asList("1", "2", "3"));
        map.put(2, Arrays.asList("4", "5", "6"));
 
        // Creating a List class object holding all elements
        // after flattening
        List<String> s = flatten(map.values())
                             .collect(Collectors.toList());
 
        // Print and display the above List object
        System.out.println(s);
    }
}
Java

输出

[1, 2, 3, 4, 5, 6]
Java

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册