java 1.8 list 相同数据分组得到多个子list
时间: 2023-09-10 15:12:56 浏览: 43
可以使用Java 8的流式处理和Collectors.groupingBy()方法来实现。具体实现方法如下:
假设有一个包含多个元素的List对象,每个元素都有一个属性,我们要根据这个属性对元素进行分组,得到多个子List。
```
List<MyObject> list = ... // 包含多个元素的List对象
Map<String, List<MyObject>> groups = list.stream()
.collect(Collectors.groupingBy(MyObject::getProperty));
```
其中,MyObject代表List中的元素类型,getProperty()方法返回元素的属性值,groups是一个Map对象,其中键是属性值,值是相应属性值对应的元素子List。
如果要得到子List中的元素按照某个属性排序后的结果,可以使用sorted()方法:
```
Map<String, List<MyObject>> groups = list.stream()
.sorted(Comparator.comparing(MyObject::getSomeProperty))
.collect(Collectors.groupingBy(MyObject::getProperty));
```
其中,getSomeProperty()方法返回一个用于排序的属性值,将其传递给Comparator.comparing()方法用于排序。
相关问题
java获取集合中的指定元素然后list存起来用jdk1.8实现
好的,可以使用 Java 8 中的 Stream API 来实现。假设你要获取集合 set 中的元素 "a"、"b" 和 "c",然后将它们存储在列表 list 中,可以使用以下代码:
```
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c", "d", "e"));
List<String> list = set.stream()
.filter(x -> Arrays.asList("a", "b", "c").contains(x))
.collect(Collectors.toList());
System.out.println(list);
```
这段代码首先创建了一个集合 set,其中包含了一些元素。然后使用 Stream API 中的 filter() 方法过滤出符合条件的元素,最后使用 collect() 方法将过滤后的元素收集到一个新列表 list 中。
注意,这里的 Arrays.asList("a", "b", "c") 创建了一个包含指定元素的列表,然后使用 contains() 方法来判断元素是否在该列表中。如果需要获取的元素比较多,可以先将它们存储在一个集合中,然后在 filter() 方法中使用该集合进行判断。
另外,由于 Stream API 是 Java 8 中新增的功能,所以需要使用 JDK 1.8 或更高版本才能使用。
jdk1.8环境下写一个可以执行多条Linux命令,并将所有输出结果以List形式返回的方法
可以使用Java的ProcessBuilder类来执行Linux命令,并将命令输出结果保存到List中。下面是一个示例代码:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class CommandExecutor {
public static List<String> executeCommands(String... commands) throws IOException, InterruptedException {
ProcessBuilder processBuilder = new ProcessBuilder(commands);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
List<String> output = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
output.add(line);
}
int exitCode = process.waitFor();
if (exitCode != 0) {
throw new RuntimeException("Command execution failed with exit code " + exitCode);
}
return output;
}
}
```
这个方法接受一个或多个Linux命令作为参数,并返回一个List,其中包含所有命令的输出结果。如果任何一个命令执行失败,将抛出一个RuntimeException异常。使用示例:
```java
List<String> output = CommandExecutor.executeCommands("ls", "-la", "/tmp");
for (String line : output) {
System.out.println(line);
}
```
这个示例将会执行ls -la /tmp命令,并将所有输出结果打印到控制台。