目录
判断是否全部的人都超过24岁的人,只要有一个不是就返回false
判断是否全部的人都不超过24岁的人,只要有一个超过就返回false
17.根据visit字段来排序降序排序(大到小),然后取前面5个数据
18.分组-当从数据库判断如果type=**,就加入到对应的list里面
1.遍历输出list
package com.lpc.Test;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* @Author lpc
* @Date 2024 01 09 20 34
**/
public class Stream {
//System.out.println() 快捷键:sout
@Test
public void list() {
List<String> list = new ArrayList<>();
list.add("炭治郎");
list.add("伊之助");
list.add("善逸");
list.stream().forEach(s -> System.out.println("value:"+s));
}
}
2.遍历输出对象
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
package com.lpc.Test;
import com.lpc.entity.Users;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* @Author lpc
* @Date 2024 01 09 20 34
**/
public class Stream {
//System.out.println() 快捷键:sout
@Test
public void Users(){
List<Users> userList=new ArrayList<>();
userList.add(new Users(1, "user1", "password1"));
userList.add(new Users(2, "user2", "password2"));
userList.add(new Users(3, "user3", "password3"));
userList.stream().forEach(users -> System.out.println(users));
}
}
结果
3.遍历对象--将某个字段设成我们指定的值
@Test
public void Users(){
List<Users> userList=new ArrayList<>();
userList.add(new Users(1, "user1", "password1"));
userList.add(new Users(2, "user2", "password2"));
userList.add(new Users(3, "user3", "password3"));
//将密码统一改成520
userList.stream().forEach(users -> users.setPassword("520"));
//遍历输出
userList.stream().forEach(users -> System.out.println(users));
}
结果:
4.遍历对象--遍历到了我们要的值就改变里面的属性
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
package com.lpc.Test;
import com.lpc.entity.Users;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* @Author lpc
* @Date 2024 01 09 20 34
**/
public class Stream {
//System.out.println() 快捷键:sout
@Test
public void Users2(){
List<Users> userList=new ArrayList<>();
userList.add(new Users(1, "user1", "password1"));
userList.add(new Users(2, "user2", "password2"));
userList.add(new Users(3, "user3", "password3"));
//遍历到了id=2,就把它的username改成:炭治郎
userList.stream().forEach(users -> {
if (users.getId().equals(2)){
users.setUsername("炭治郎");
}
});
userList.stream().forEach(users -> System.out.println(users));
}
}
结果
5.过滤-我们只要18岁以上的人
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private Integer age;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
@Test
public void Users2(){
List<Users> userList=new ArrayList<>();
userList.add(new Users(1, "user1", "password1",25));
userList.add(new Users(2, "user2", "password2",17));
userList.add(new Users(3, "user3", "password3",19));
//过滤掉18岁以下的
List<Users> newUserList=userList.stream().filter(users -> users.getAge()>=18).collect(Collectors.toList());
System.out.println(newUserList);
}
6.去重--去除完全相同的数据
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private Integer age;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
@Test
public void Users3(){
List<Users> userList=new ArrayList<>();
userList.add(new Users(1, "user1", "password1",25));
userList.add(new Users(2, "user2", "password2",17));
userList.add(new Users(3, "user3", "password3",19));
userList.add(new Users(3, "user3", "password3",19));
userList.add(new Users(3, "user3", "password3",19));
userList.add(new Users(3, "user3", "password3",19));
//去除完全相同的数据
userList=userList.stream().distinct().collect(Collectors.toList());
System.out.println(userList);
}
7.去重--根据username来去重
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private Integer age;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
@Test
public void Users4(){
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user3", "password3", 19)); // 重复记录
userList.add(new Users(5, "user3", "password3", 19)); // 重复记录
userList.add(new Users(6, "user3", "password3", 19)); // 重复记录
//根据username去重
List<Users> userList2=userList.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(users -> users.getUsername()))), ArrayList::new)
);
System.out.println(userList2);
}
8.统计
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private Integer age;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
@Test
public void Users6(){
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user4", "password4", 19)); // 重复记录
userList.add(new Users(5, "user5", "password5", 19)); // 重复记录
userList.add(new Users(6, "user6", "password6", 19)); // 重复记录
//统计
Long count=userList.stream().count();
System.out.println( count);
}
9.截取--我们只需要多少条记录,我们自己定
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private Integer age;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
@Test
public void Users7(){
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user4", "password4", 19)); // 重复记录
userList.add(new Users(5, "user5", "password5", 19)); // 重复记录
userList.add(new Users(6, "user6", "password6", 19)); // 重复记录
//只需要前三条数据
userList=userList.stream().limit(3).collect(Collectors.toList());
System.out.println(userList);
}
10.排序操作
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private Integer age;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
@Test
public void Users8() {
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user4", "password4", 18));
userList.add(new Users(5, "user5", "password5", 19));
userList.add(new Users(6, "user6", "password6", 20));
//根据年龄从小到大排序
userList = userList.stream().sorted(Comparator.comparing(Users::getAge)).collect(Collectors.toList());
System.out.println(userList);
System.out.println("--------------------------------------------------------------");
//根据年龄从大到小排序
List<Users> users = userList.stream().sorted(Comparator.comparing(Users::getAge).reversed()).collect(Collectors.toList());
System.out.println(users);
}
11.指定排序操作
12.判断
判断是否有超过24岁的人,只要有一个就返回true
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private Integer age;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
@Test
public void Users9() {
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user4", "password4", 18)); // 重复记录
userList.add(new Users(5, "user5", "password5", 19)); // 重复记录
userList.add(new Users(6, "user6", "password6", 20)); // 重复记录
//判断userList里面是否有超过24的人,只要有一个就返回true
boolean flag=userList.stream().anyMatch(users -> users.getAge()>=24);
System.out.println(flag);
}
判断是否全部的人都超过24岁的人,只要有一个不是就返回false
@Test
public void Users10() {
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user4", "password4", 18)); // 重复记录
userList.add(new Users(5, "user5", "password5", 19)); // 重复记录
userList.add(new Users(6, "user6", "password6", 20)); // 重复记录
//判断userList里面是否有超过24的人,只要有一个就返回true
boolean flag=userList.stream().allMatch(users -> users.getAge()>=24);
System.out.println(flag);
}
判断是否全部的人都不超过24岁的人,只要有一个超过就返回false
@Test
public void Users10() {
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user4", "password4", 18)); // 重复记录
userList.add(new Users(5, "user5", "password5", 19)); // 重复记录
userList.add(new Users(6, "user6", "password6", 20)); // 重复记录
//判断userList里面是否有超过24的人,只要有一个就返回true
boolean flag=userList.stream().noneMatch(users -> users.getAge()>=24);
System.out.println(flag);
}
13.将对象的中的某个字段变成集合
Users
package com.lpc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author lpc
* @Date 2024 01 08 10 24
**/
@Data //简化实体类,get,set,构造都有了
@AllArgsConstructor
public class Users {
private Integer id;
private String username;
private String password;
private Integer age;
}
AllArgsConstructor
是 lombok 提供的一个注解,它可以为类生成一个包含所有字段的构造函数。使用 @AllArgsConstructor
注解,你就不需要手动编写构造函数,lombok 会自动生成一个构造函数,并将所有字段作为参数。
依赖
<!--Lombok 是一个开发工具,可以通过注解自动化生成 Java 代码中的一些样板代码,
如 getter、setter、构造函数等,减少了编写冗余代码的工作量。-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<properties>
<!--依赖版本控制-->
<lombok.version>1.18.16</lombok.version>
</properties>
Test
@Test
public void Users11() {
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user4", "password4", 18)); // 重复记录
userList.add(new Users(5, "user5", "password5", 19)); // 重复记录
userList.add(new Users(6, "user6", "password6", 20)); // 重复记录
//将对象的中的某个字段变成集合
List<String> nameList=userList.stream().map(users -> users.getUsername()).collect(Collectors.toList());
// System.out.println(); 快捷键:sout
System.out.println(nameList);
}
14.获取年龄最大的人和年龄最小的人
问题:我这样写只能查出一个人,有相同的最大年龄,相同的最小年龄不能都查出来
@Test
public void Users16() {
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 19));
userList.add(new Users(4, "user4", "password4", 18));
userList.add(new Users(5, "user5", "password5", 17));
userList.add(new Users(6, "user6", "password6", 20));
//获取年龄最大的
Users user=userList.stream().max(Comparator.comparing(Users::getAge)).get();
System.out.println(user);
//获取年龄最小的
Users user2=userList.stream().min(Comparator.comparing(Users::getAge)).get();
System.out.println(user2);
}
15.获取所有年龄最大的人和所有年龄最小的人
@Test
public void Users16() {
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 25));
userList.add(new Users(4, "user4", "password4", 18));
userList.add(new Users(5, "user5", "password5", 17));
userList.add(new Users(6, "user6", "password6", 20));
// 获取年龄最大的所有人
int maxAge = userList.stream().max(Comparator.comparing(Users::getAge)).get().getAge();
List<Users> oldestUsers = userList.stream().filter(u -> u.getAge() == maxAge).collect(Collectors.toList());
System.out.println("年龄最大的人:");
oldestUsers.forEach(System.out::println);
// 获取年龄最小的所有人
int minAge = userList.stream().min(Comparator.comparing(Users::getAge)).get().getAge();
List<Users> youngestUsers = userList.stream().filter(u -> u.getAge() == minAge).collect(Collectors.toList());
System.out.println("年龄最小的人:");
youngestUsers.forEach(System.out::println);
}
`System.out::println` 是 Java 8 中引入的方法引用(Method Reference)的语法。它表示对 `System.out.println` 方法的引用。具体而言,`System.out.println` 是一个静态方法,用于将参数打印到控制台,并换行。通过 `System.out::println`,你可以在流的 `forEach` 方法中将每个元素传递给 `System.out.println` 方法。
在上述代码中,`System.out.println` 是通过方法引用的方式传递给 `forEach` 方法。这意味着对于流中的每个元素,将调用 `System.out.println` 方法,并将元素作为参数传递给该方法。这样可以方便地打印出流中的元素。
方法引用是一种简化 Lambda 表达式的方法,可以提高代码的可读性和简洁性。 `System.out::println` 是其中一种常见的用法,表示引用 `System.out` 对象的 `println` 方法。
16.自定义排序-根据名字自定义排序
@Test
public void Users17() {
List<Users> userList = new ArrayList<>();
userList.add(new Users(1, "user1", "password1", 25));
userList.add(new Users(2, "user2", "password2", 17));
userList.add(new Users(3, "user3", "password3", 25));
userList.add(new Users(4, "user4", "password4", 18));
userList.add(new Users(5, "user5", "password5", 17));
userList.add(new Users(6, "user6", "password6", 20));
List<String> nameList = Arrays.asList("user1","user3","user2","user4","user5","user6");
userList =userList.stream().sorted(Comparator.comparing(Users::getUsername,(x, y)->
{
for (String name : nameList) {
if (name.equals(x) || name.equals(y)) {
if (x.equals(y)) {
return 0;
} else if (name.equals(x)) {
return -1;
} else {
return 1;
}
}
}
return 0;
})).
collect(Collectors.toList());
System.out.println("value:"+userList);
}
17.根据visit字段来排序降序排序(大到小),然后取前面5个数据
List<YcFile> sortedAndLimitedList = ycFileList.stream()
.sorted(Comparator.nullsLast(Comparator.comparingLong(YcFile::getVisit).reversed()))
//给出前5条阅读量最多的文件
.limit(5)
.collect(Collectors.toList());
ycFileList.stream()
将ycFileList
转换为一个流。sorted(Comparator.nullsLast(Comparator.comparingLong(YcFile::getVisit).reversed()))
对流中的元素进行排序,首先使用Comparator.nullsLast
对空值进行处理,然后使用Comparator.comparingLong(YcFile::getVisit)
按照YcFile
对象的visit
属性进行升序排序,最后使用reversed()
将排序结果反转,即按照降序排序。limit(5)
限制只取前5条元素。collect(Collectors.toList())
将流中的元素收集到一个新的List
中,并将结果赋值给sortedAndLimitedList
变量。- 最终,
sortedAndLimitedList
中存储的是ycFileList
中阅读量最多的前5个文件。
18.分组-当从数据库判断如果type=**,就加入到对应的list里面
@Test
public void add(){
// 创建一个包含多个元素的type数组
Integer[] typeArray = {1, 2, 3, 1, 2, 3};
List<Integer> typeList = new ArrayList<>(Arrays.asList(typeArray));
List<Integer> oneList = new ArrayList<>();
List<Integer> twoList = new ArrayList<>();
List<Integer> threeList = new ArrayList<>();
// 使用switch对类型进行判断并添加到相应的列表中
typeList.forEach(type -> {
switch (type) {
case 1:
oneList.add(type);
break;
case 2:
twoList.add(type);
break;
case 3:
threeList.add(type);
break;
default:
// 处理其他类型的情况
break;
}
});
// 打印结果
System.out.println("oneList: " + oneList);
System.out.println("twoList: " + twoList);
System.out.println("threeList: " + threeList);
}