首页 > 编程语言 >java8新特性,stream流简单使用

java8新特性,stream流简单使用

时间:2023-05-18 17:12:53浏览次数:35  
标签:stream author list void List 特性 println java8

//新建测试类

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Author {
//id
private Long id;
//姓名
private String name;
//年龄
private Integer age;
//简介
private String intro;
//作品
private List<Book> books;
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode//用于后期的去重使用
public class Book {
//id
private Long id;
//书名
private String name;

//分类
private String category;

//评分
private Integer score;

//简介
private String intro;
}


//代码示例
/**
* 获取任意一个年龄大于18的作家,如果存在就输出他的名字
*/
@Test
public void test18(){
List<Author> list = getAuthors();
Optional<Author> optionalS = list.stream()
.filter(author -> author.getAge() > 18)
.findAny();
System.out.println(optionalS.get());
}


/**
* 判断作家是否都没有超过100岁的。
*/
@Test
public void test17(){
List<Author> list = getAuthors();
boolean flag = list.stream().noneMatch(author -> author.getAge() > 100);
System.out.println(flag);
}


/**
* 判断是否所有的作家都是成年人
*/
@Test
public void test16(){
List<Author> list = getAuthors();
boolean flag = list.stream().allMatch(author -> author.getAge() >= 18);
System.out.println(flag);
}



/**
* 判断是否有年龄在29以上的作家
*/
@Test
public void test15(){
List<Author> list = getAuthors();
boolean flag = list.stream().anyMatch(author -> author.getAge() > 35);
System.out.println(flag);
}


/**
* 获取一个Map集合,map的key为作者名,value为List<Book>
*/
@Test
public void test14(){
List<Author> list = getAuthors();
Map<String,Object> map = list.stream()
.distinct()
.collect(Collectors.toMap
(author -> author.getName(), author -> author.getBooks()
.stream().map(a->a.getName())
.distinct()
.collect(Collectors.toList())));
System.out.println(map);
}

/**
* 获取一个所有书名的Set集合
*/
@Test
public void test13(){
List<Author> list = getAuthors();
Set<Book> strings = list.stream().flatMap(author -> author.getBooks().stream())
.collect(Collectors.toSet());
Set<String> strings2 = list.stream().flatMap(author -> author.getBooks().stream())
.map(a->a.getName())
.distinct()
.collect(Collectors.toSet());
System.out.println(strings2);
}


/**
* 获取一个存放所有作者名字的List集合。
*/
@Test
public void test12(){
List<Author> list = getAuthors();
List<String> strings = list.stream().map(author -> author.getName())
.distinct()
.collect(Collectors.toList());
System.out.println(strings);
}

/**
* 分别获取这些作家的所出书籍的最高分和最低分并打印
*/
@Test
public void test11(){
List<Author> list = getAuthors();
Optional<Integer> strings = list.stream().flatMap(author -> author.getBooks().stream())
.map(a->a.getScore())
.max((s1,s2)->s1 - s2);
Optional<Integer> strings2 = list.stream().flatMap(author -> author.getBooks().stream())
.map(a->a.getScore())
.min((s1,s2)->s1 - s2);
System.out.println(strings.get() + "---" +strings2.get());


}


/**
* 打印这些作家的所出书籍的数目,注意删除重复元素
*/
@Test
public void test10(){
List<Author> list = getAuthors();
long count = list.stream().flatMap(author -> author.getBooks().stream())
.distinct()
.count();
System.out.println(count);
}

/**
* 打印现有书籍的所有分类。要求对分类进行去重。不能出现这种格式:哲学,爱情
*/
@Test
public void test09(){
List<Author> list = getAuthors();
List<String> strings = list.stream()
.flatMap(author -> author.getBooks().stream())
.distinct()
.flatMap(a->Arrays.stream(a.getCategory().split(",")))
.collect(Collectors.toList());
for (String s : strings){
System.out.println(s);
}

}


/**
* 打印所有书籍的名字。要求对重复的元素进行去重。
*/
@Test
public void test08(){
List<Author> list = getAuthors();
List<String> strings = list.stream()
.flatMap(author -> author.getBooks().stream())
.distinct()
.map(a->a.getName())
.collect(Collectors.toList());
for (String author : strings){
System.out.println(author);
}
}

/**
* 打印除了年龄最大的作家外的其他作家,要求不能有重复元素,并且按照年龄降序排序
*/
@Test
public void test07(){
List<Author> list = getAuthors();
List<Author> authors = list.stream().distinct()
.sorted((a1,a2) ->a2.getAge() - a1.getAge())
.skip(1)
.collect(Collectors.toList());
for (Author author : authors){
System.out.println(author);
}
}

/**
* 对作家进行年龄排序,不能有重复.并且打印年龄最大的一个作家
*/
@Test
public void test06(){
List<Author> list = getAuthors();
List<Author> authors = list.stream().distinct()
.sorted((a1,a2) ->a2.getAge() - a1.getAge())
.limit(1)
.collect(Collectors.toList());
for (Author author : authors){
System.out.println(author);
}
}

/**
* 对作家进行年龄排序,不能有重复
*/
@Test
public void test05(){
List<Author> list = getAuthors();
List<Author> authors = list.stream().distinct()
.sorted((o1,o2)->o2.getAge() - o1.getAge())
.collect(Collectors.toList());

for (Author author : authors){
System.out.println(author);
}
}


/**
* 打印所有作家的姓名,不能有重复的姓名
*/
@Test
public void test04(){
List<Author> list = getAuthors();
List<String> strings = list.stream().map(author -> author.getName())
.distinct()
.collect(Collectors.toList());
for (String author : strings){
System.out.println(author);
}
}


/**
* 打印所有作家的姓名
*/
@Test
public void test03(){
List<Author> list = getAuthors();
List<String> authors = list.stream().map(author -> author.getName()).collect(Collectors.toList());
for (String author : authors){
System.out.println(author);
}

}

/**
* 打印说明姓名长度大于1的作家
*/
@Test
public void test02(){
List<Author> list = getAuthors();
List<Author> authors = list.stream().filter(author -> author.getName().length() > 1).collect(Collectors.toList());
for (Author author : authors){
System.out.println(author);
}
}


/**
* 打印所有年龄小于18的作者
*/
@Test
public void test01(){
List<Author> list = getAuthors();
List<Author> authors = list.stream().filter(author -> author.getAge() < 18).collect(Collectors.toList());
for (Author author : authors){
System.out.println(author);
}
}


标签:stream,author,list,void,List,特性,println,java8
From: https://www.cnblogs.com/802syy/p/17412498.html

相关文章

  • 新特性解读 | MySQL 8.0 新密码策略
    转载于:https://mp.weixin.qq.com/s/GK56N5SaafCIKuP6N3lMUg引言这里来介绍下MySQL8.0版本自带的新密码验证策略。正文我们非常熟悉这样的模式:用户想更改自己密码,需要提供原来密码或者追加手机验证码才可以,这种模式在MySQL数据库里一直不存在。在MySQL8.0之前的版本,普......
  • Redis 高级特性 Redis Stream使用
    RedisStream简介RedisStream是Redis5.0版本新增加的数据结构。Stream从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,MessageQueue)的完善实现。下文称Stream为队列Stream出现原因:Stream的出现是为了给Redis提供完善的消息队列功能基于Reids的消息队列......
  • Java8 Stream --groupingBy 分组讲解
    本文主要讲解:Java8Stream之Collectors.groupingBy()分组示例Collectors.groupingBy()分组之常见用法功能代码:/***使用java8streamgroupingBy操作,按城市分组list*/publicvoidgroupingByCity(){Map<String,List<Employee>>map=employe......
  • 4大特性看Huawei Cloud EulerOS为开发者带来平滑迁移体验
    摘要:本期《解密HuaweiCloudEulerOS算力释放技术》主题直播中,华为云DTSE技术布道师陆维迪通过剖析传统OS上云面临的性能,安全,弹性等问题,与开发者们分享HuaweiCloudEulerOS(简称“HCEOS”)在提升客户云上使用体验的核心优势和关键技术。本文分享自华为云社区《4大特性看Huawei......
  • 关于CentOS8出现“Error: Failed to download metadata for repo 'appstream': Cannot
    原因因为centOS8于2021年12月31日停止了源的服务,而现在时间是2023年,所以之前的方法都不行的原因所在(本质是源的问题)。 解决方法 cd/etc/yum.repos.dsed-i's/mirrorlist/#mirrorlist/g'/etc/yumrepos.d/CentOS-*sed-i's|#baseurl=http://mirror.centos.o......
  • Java 主要特性
     Java语言是简单的:Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,而是引用。并提供了自动分配......
  • java8 lamda表达式
    list分组1.多字段联合,分组list.stream().collect(Collectors.groupingBy(o->o.getSkuName()+"_"+o.getOeCode(),Collectors.toList()));2.求和计算 Integernum=list.stream().mapToInt(n->n.getNum()).sum();3.分组-排序list.stream().coll......
  • 八、事务的ACID特性
     事务的ACID特性Atomic(原子性)所有语句作为一个单元全部成功执行或全部取消。不能出现中间状态。Consistent(一致性)如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。Isolated(隔离性)事务之间不相互影响Durable(持久性)事务成功完成后,所做的所有更改都......
  • 一图看懂CodeArts Deploy 5大特性,带你玩转部署服务
    华为云持续部署服务CodeArtsDeploy,通过模块化自由编排部署流程,实现软件的自动化部署,基于其易入门、功能全、集成度高、自动化、可靠的部署能力,能够帮您快速实现业务上云,全面提升软件的交付效率,显著提升交付质量! ......
  • 什么是人工智能模型的涌现特性?
    涌现特性(Emergentproperty)是指在一个复杂系统中,一些新的、意想不到的特性逐渐显现出来,这些特性在系统的各个组成部分中并不存在。在人工智能(AI)模型中,涌现特性通常是指模型通过大量数据训练后,展现出一些在训练数据中没有明确指示的能力或行为。对于人工智能模型,涌现特性通常是由......