java8新特性,stream流的用法,实现了对集合的一些特殊处理,处理的方式比较类似于sql的语法。
以下案例均为正确使用方法,仅供学习参考
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamDemo {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
User user = new User();
user.setId("1");
user.setName("张一");
userList.add(user);
user = new User();
user.setId("4");
user.setName("张四");
userList.add(user);
user = new User();
user.setId("2");
user.setName("张二");
userList.add(user);
user = new User();
user.setId("3");
user.setName("张三");
userList.add(user);
user = new User();
user.setId("5");
user.setName("张二");
userList.add(user);
// 获取名称的集合 (stream 串行流)
// List<String> collect = userList.stream().map(User::getName).collect(Collectors.toList());
// System.out.println("获取名称的集合:" + collect);
// //parallelStream() − 为集合创建并行流 并行流是多线程的结果,速度比stream快很多,可能会和stream结果不一致,但是效率很高
// collect = userList.parallelStream().map(User::getName).collect(Collectors.toList());
// System.out.println("获取名称的集合:" + collect);
// 限制输出
// List<String> collect = userList.stream().map(User::getName).limit(3).collect(Collectors.toList());
// System.out.println("限制输出三个:" + collect);
// 获取排序的集合
// List<String> collect = userList.stream().map(User::getId).sorted().collect(Collectors.toList());
// System.out.println("获取排序的集合:"+collect);
// 多字段排序
List<DeviceTreeSortDto> newSortList = sortList.stream().sorted(
Comparator.comparing(DeviceTreeSortDto::getOldSortCode)
.thenComparing(DeviceTreeSortDto::getCategory, Comparator.reverseOrder()))
.collect(Collectors.toList());
// 获取去除重复的集合
// List<String> collect = userList.stream().map(User::getName).distinct().collect(Collectors.toList());
// System.out.println("获取去除重复的集合:"+collect);
// 过滤
// List<String> collect = userList.stream().map(User::getName).filter(str -> str!=null && !str.isEmpty()).collect(Collectors.toList());
// System.out.println("过滤:"+collect);
// 获取集合装字符串
// String mergedString = userList.stream().map(User::getName).filter(str -> str!=null && !str.isEmpty()).collect(Collectors.joining(", "));
// System.out.println("直接获取字符串:"+mergedString);
// 获取空字符串的数量
// List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// long count = strings.stream().filter(str -> str!=null && !str.isEmpty()).count();
// System.out.println("获取空字符串的数量:"+count);
// 统计 (总数量,总和,最小值,最大值,平均值)
// List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
// System.out.println("统计:"+stats);
// 获取对应的平方数
// List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
// System.out.println("去重获取平方:"+ JSON.toJSONString(squaresList));
// 获取集合中,指定值的部分集合(获取总集合中,班级id为11的数据集合)
List<Detail> details = list.stream().filter(item -> StringUtils.equals('11', item.getClassId())).collect(Collectors.toList());
// 对象集合,根据某一个属性进行去重
eduPeriodGrades = eduPeriodGrades.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(EduPeriodGrade :: getGrade))), ArrayList::new));
// list对象数组,根据某一个属性转map
Map<String, List<Dict>> map = dictList.stream()
.collect(Collectors.groupingBy(Dict::getTypeCode));
// list集合生成id到元素对象的Map集合
Map<String, Student> id2StudentMap = studentList.stream().collect(Collectors.toMap(Student::getId, item -> item));
// list集合生成id到指定对象属性的Map集合
Map<String, String> id2NameMap = studentList.stream().collect(Collectors.toMap(Student::getId, Student::getName));
// 快速截取最后10个元素(注:需要判断list.size()是否大于10)
// skip是跳过指定个元素,跳过(list.size() - 10)个元素,则list只剩下最后10个元素
List<M> list1 = list.stream()
.skip(list.size() - 10)
.collect(Collectors.toList());
}
}
学海无涯苦作舟!