功能:Java8新特性steam流
Java8新特性steam流
一、包装数据类型#
@Test public void main22() { List<Integer> list = new ArrayList<Integer>(){{ add(7); add(5); add(1); add(2); add(8); add(4); add(3); add(6); add(3); add(6); add(3); add(6); }}; // 过滤 List<Integer> filterList = list.stream().filter(a -> a < 5).collect(Collectors.toList()); // 排序(正序) List<Integer> sortList1 = list.stream().sorted().collect(Collectors.toList()); List<Integer> sortList2 = list.stream().sorted(Comparator.comparing(a -> a, Comparator.naturalOrder())).collect(Collectors.toList()); // 排序(倒序) List<Integer> sortList3 = list.stream().sorted(Comparator.comparing(a -> a, Comparator.reverseOrder())).collect(Collectors.toList()); // 最大数 Integer max = list.stream().max(Comparator.comparing(a -> a, Comparator.naturalOrder())).get(); // 最小数 Integer min = list.stream().min(Comparator.comparing(a -> a, Comparator.naturalOrder())).get(); // 去重 List<Integer> distinctList = list.stream().distinct().collect(Collectors.toList()); // 对每个元素进行操作 List<Integer> mapList = list.stream().map(a -> a * a).collect(Collectors.toList()); System.out.println(max); System.out.println(min); mapList.forEach(a -> System.out.print(a+" ")); }
二、Map类型#
import org.apache.commons.lang.StringUtils; @Test public void test() { HashMap<String, Integer> map = new HashMap<String, Integer>(){{ put("A", 1); put("B", 2); put("C", 3); put("D", 4); put("E", 1); put("F", 1); put("", 1); put("", 1); }}; // key集合转list List<String> keyList1 = map.keySet().stream().filter(a -> StringUtils.isNotBlank(a)).collect(Collectors.toList()); List<String> keyList2 = map.entrySet().stream().map(entry -> entry.getKey()).filter(a -> StringUtils.isNotBlank(a)).collect(Collectors.toList()); // value集合转list List<Integer> valueList = map.entrySet().stream().map(entry -> entry.getValue()).collect(Collectors.toList()); // 处理value,同理可处理key Map<String, Integer> newMap = map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, a -> a.getValue() * a.getValue())); // key value换位,key冲突时,新value替换旧value Map<Integer, String> reMap1 = map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey, (String val1, String val2) -> val2 )); // key value换位,key冲突时,加入value列表中 Map<Integer, List<String>> reMap2 = map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, a -> new ArrayList<String>(){{ add(a.getKey()); }}, (List<String> v1, List<String> v2) -> { v1.addAll(v2); return v1; } )); keyList2.forEach(a -> System.out.printf(a + " ")); System.out.println(); reMap2.entrySet().forEach(entry -> System.out.println("key: " + entry.getKey() + ", val: " + entry.getValue())); }
三、对象List#
@Test public void test() { List<User> list = new ArrayList<User>() {{ add(new User(1, "半月", 18)); add(new User(2, "无霜", 22)); add(new User(3, "半月无霜", 24)); add(new User(3, "半霜", 28)); add(new User(4, "半霜", 28)); }}; // 转Map<id, user>,如遇到key冲突,可参考第二段map解决办法 Map<Integer, User> map1 = list.stream().collect(Collectors.toMap(User::getId, Function.identity())); Map<Integer, User> map2 = list.stream().collect(Collectors.toMap(User::getId, a -> a)); // 查找 User user = list.stream().filter(a -> "半月".equals(a.getName())).findFirst().get(); // 过滤计数 long count = list.stream().filter(a -> a.getAge() >= 22).count(); // 排序(通过年龄排正序) List<User> orderList = list.stream().sorted(Comparator.comparing(User::getAge, Comparator.naturalOrder())).collect(Collectors.toList()); // 排序(通过年龄排倒序) List<User> reorderList = list.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder())).collect(Collectors.toList()); // 对象去重(通过ID去重) List<User> unionUser = list.stream().collect( Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getId()))), ArrayList::new)); // 属性集合(此处为名字集合) List<String> nameList = list.stream().map(User::getName).collect(Collectors.toList()); // 截取,skip:跳过前n个,limit:取n个 List<User> limitList = list.stream().skip(1).limit(2).collect(Collectors.toList()); // 判断是否存在(半月是否存在) boolean isHave1 = list.stream().anyMatch(a -> "半月".equals(a.getName())); // 判断所有是否满足(是否都大于16岁) boolean fullAge = list.stream().allMatch(a -> a.getAge() > 16); // 判断是否不存在(里面没有ID为10的用户) boolean isHave2 = list.stream().noneMatch(a -> "10".equals(a.getId())); limitList.forEach(System.out::println); System.out.println(isHave2? "没有ID为10的用户": "有ID为10的用户"); } @Data @AllArgsConstructor class User{ private Integer id; private String name; private Integer age; }
作者: 半月无霜
出处:https://www.cnblogs.com/banmoon/p/13862516.html
本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!