java List<T> 横转纵
时间: 2023-07-08 16:26:11 浏览: 43
将Java中的List对象横向转换为纵向,可以使用Java的Stream API和Collectors工具类。具体步骤如下:
1. 假设有一个横向的List对象aList,其中包含n个元素,每个元素也是一个List。
2. 使用Stream API的flatMap方法将aList转换为一个Stream对象,其中每个元素是aList中所有List的第i个元素,i从0到n-1。
3. 使用Collectors工具类的toList方法将Stream对象转换为一个纵向的List对象。
示例代码如下:
```java
List<List<Integer>> aList = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
List<List<Integer>> transposedList = IntStream.range(0, aList.get(0).size())
.mapToObj(i -> aList.stream().map(row -> row.get(i)).collect(Collectors.toList()))
.collect(Collectors.toList());
System.out.println(transposedList);
```
输出结果为:
```
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
```
相关问题
Collection<T> 转List<T> java
要将`Collection<T>`转换为`List<T>`,可以使用`ArrayList`的构造函数或`addAll`方法。以下是两种方法的示例代码:
方法一:使用ArrayList的构造函数
```java
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class Main {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("A");
collection.add("B");
collection.add("C");
List<String> list = new ArrayList<>(collection);
System.out.println(list); // 输出 [A, B, C]
}
}
```
在上述示例中,我们通过将`Collection<T>`传递给`ArrayList`的构造函数来创建一个新的`ArrayList`对象,并将其赋值给`List<T>`类型的变量。
方法二:使用addAll方法
```java
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class Main {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("A");
collection.add("B");
collection.add("C");
List<String> list = new ArrayList<>();
list.addAll(collection);
System.out.println(list); // 输出 [A, B, C]
}
}
```
在上述示例中,我们创建了一个空的`ArrayList`对象,并使用`addAll`方法将`Collection<T>`中的元素添加到新的列表中。
无论使用哪种方法,最终都会将`Collection<T>`转换为`List<T>`类型的列表。
Map<String,List<T>>转成List<T>
可以使用 Java 8 中的流(Stream)来实现将 Map<String, List<T>> 转成 List<T> 的操作。以下是示例代码:
```java
Map<String, List<T>> map = ... // 假设已经有一个 Map<String, List<T>> 对象
List<T> list = map.values().stream() // 获取 Map 中的所有 value(即 List<T>)
.flatMap(Collection::stream) // 将所有 List<T> 中的元素合并成一个 Stream<T>
.collect(Collectors.toList()); // 将 Stream<T> 转成 List<T>
```
解释一下上面的代码:
1. 首先通过 `map.values()` 获取 Map 中的所有 value,得到一个 `Collection<List<T>>` 对象;
2. 然后调用 `stream()` 方法将其转成一个流;
3. 接着调用 `flatMap(Collection::stream)` 方法将所有 List<T> 中的元素合并成一个 Stream<T>;
4. 最后调用 `collect(Collectors.toList())` 方法将 Stream<T> 转成 List<T>。
这样就可以将 Map<String, List<T>> 转成 List<T> 了。