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
例子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