JDK8 Stream 排序,自定义排序,去重复,limit,skip

stream 练习

排序 去重 过滤 限制取值

  1. 排序练习
	// 对象流练习
	Post post1 = new Post(1, "测试内容", 1500000000001L, (byte) 0, (byte) 0);
	Post post2 = new Post(2, "测试内容", 1500000000002L, (byte) 0, (byte) 0);
	Post post3 = new Post(3, "测试内容", 1500000000003L, (byte) 0, (byte) 1);
	Post post4 = new Post(4, "测试内容", 1500000000004L, (byte) 0, (byte) 0);
	Post post5 = new Post(5, "测试内容", 1500000000005L, (byte) 1, (byte) 1);
	Post post6 = new Post(6, "测试内容5", 1500000000006L, (byte) 0, (byte) 0);
	Post post7 = new Post(7, "测试内容", 1500000000007L, (byte) 0, (byte) 0);

	List<Post> posts = Arrays.asList(post1, post2, post3, post4, post5, post6, post7);
	
	//通过指定的字段进行排序 倒序或者正序
	
// 都是倒序
	posts.sort(
		Comparator.comparing(Post::getId)
			.thenComparing(Post::getTopPost)
			.reversed()
	);
	
	// 都是正序
	posts.sort(
		Comparator.comparing(Post::getId)
			.thenComparing(Post::getTopPost)
	);
	
	// 先倒序后正序
	posts.sort(
		Comparator.comparing(Post::getId)
			.reversed()
			.thenComparing(Post::getTopPost)
	);
	
	// 先正序后倒序
	posts.sort(
		Comparator.comparing(Post::getId)
			.reversed()
			.thenComparing(Post::getTopPost)
			.reversed()
	);
	posts.forEach(System.out::println);
	//最后一种描述可能不好理解 先正序然后在倒序 可以理解为 先将 第一部分内容倒序,然后在将所有的结果都倒序排列,那么第一部分的内容就得到了 负负得正的感觉变为了正序
	
  1. 自定义排序
	posts.sort(((o1, o2) -> {
		int result = o1.getId() - o2.getId();
		if (result == 0) {
			result = o1.getTopPost() - o2.getTopPost();
		}
		return result;
	}));
  1. 去重,取前几位的值,跳过几位在取值
	posts = posts.stream()
		.distinct()
		.limit(2)
		.skip(1)
		.collect(Collectors.toList());
	posts.forEach(System.out::println);
  1. 过滤,匹配
	// anyMatch test
	//posts 集合中有没有非置顶的类型
	boolean result = posts.stream()
		.anyMatch(e -> e.getTopPost() == 0);

        //谓词方式
	boolean result2 = posts.stream()
		.anyMatch(Post.idGreaterThanFive);
		
	boolean allMatchResult = posts.stream()
		.allMatch(Post.contentContainsFive);

	boolean isExist = posts.stream()
		.filter(e -> e.getId() > 5)
		.findFirst()
		.isPresent();
  1. 谓词逻辑
	private Integer id;
    private String content;
    private Long createTs;
    private byte isDeleted;
    private byte topPost;

	//声明谓词逻辑 可以进行复用
	public static Predicate<Post> idGreaterThanFive = x -> x.getId() > 5;
    public static Predicate<Post> contentContainsFive = x -> x.getContent().contains("5");
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值