版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37722734/article/details/82148490
Java8之Lambda表达式概念篇:https://www.jianshu.com/p/67ebee04b2b3
Java8之Stream类:https://www.jianshu.com/p/c53eb31752c4
1.新建list Test和User实体类
import java.util.Calendar;
import java.util.Objects;
import lombok.Data;
@Data
public class User {
String userName;
String passWord;
@Override
public boolean equals(Object obj) {
/*if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (passWord == null) {
if (other.passWord != null)
return false;
} else if (!passWord.equals(other.passWord))
return false;
if (userName == null) {
if (other.userName != null)
return false;
} else if (!userName.equals(other.userName))
return false;
return true;*/
if (obj == this) return true;
if (!(obj instanceof User)) {
return false;
}
User user = (User) obj;
return
Objects.equals(userName, user.userName) &&
Objects.equals(passWord, user.passWord);
}
@Override
public int hashCode() {
/* final int prime = 31;
int result = 1;
result = prime * result + ((passWord == null) ? 0 : passWord.hashCode());
result = prime * result + ((userName == null) ? 0 : userName.hashCode());
return result;*/
return Objects.hash(passWord, userName);
}
public User(String userName, String passWord) {
super();
this.userName = userName;
this.passWord = passWord;
}
public String getUserName() {
return userName;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
public class LambdaTest {
static List<User> list=new ArrayList<User>(){
{
add(new User("a","b"));
add(new User("a1","b1"));
add(new User("a222","b2"));
add(new User("a","bb"));
add(new User("a","bbc"));
add(new User("a3","b1"));
add(new User("a44","b2"));
}
};
}
2.lambda表达式forEach两种遍历方式
@Test
public void test082401() {
String[] atp = {"1", "2","3","4"};
List<String> players = Arrays.asList(atp);
// 使用 lambda 表达式以及函数操作(functional operation)
players.forEach((player) -> System.out.print(player + "; "));
// 在 Java 8 中使用双冒号操作符(double colon operator)
players.forEach(System.out::print);
}
3.list集合的四种遍历方式
@Test
public void test082402() {
//第一种遍历方式
Iterator<Integer> it=list.iterator();
while(it.hasNext()) {
System.out.print(it.next()+" ");
}
System.out.println("\n-------------我是分割线-----------------");
//第二种遍历方式
for(Integer i:list) {
System.out.print(i+" ");
}
//第三种遍历方式
System.out.println("\n-------------我是分割线-----------------");
//第四种遍历方式
list.forEach(s->System.out.print(s+" "));
System.out.println("\n-------------我是分割线-----------------");
list.forEach(System.out::print);
}
4.lambda线程实现的4种方式
@Test
public void test082403() {
//1.1使用匿名内部类
/* new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello world !");
}
}).start(); */
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("test2018082701");
}
}).start();
new Thread(()->System.out.println("test2018082702")).start();
new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("test2018082703");
}
}.run();
Runnable r2=()->System.out.println("test2018082704");
r2.run();
/* // 1.2使用 lambda expression
new Thread(() -> System.out.println("Hello world !")).start();
// 2.1使用匿名内部类
Runnable race1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello world !");
}
};
// 2.2使用 lambda expression
Runnable race2 = () -> System.out.println("Hello world !");
// 直接调用 run 方法(没开新线程哦!)
race1.run();
race2.run();*/
}
5.lambda排序方式
@Test
public void test082701() {
String[] players = {"1", "3","2","0"};
System.out.println("排序前:");
List<String> list= Arrays.asList(players);
list.forEach(s->System.out.print(s+" "));
Arrays.sort(players, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
});
System.out.println("\n排序后:");
List<String> list1= Arrays.asList(players);
list1.forEach(s->System.out.print(s+" "));
}
@Test
public void test082702() {
String[] players = {"1", "3","2","0"};
/* Comparator<String> sortlsit=(String s1,String s2)->(s1.compareTo(s2));
Arrays.sort(players,sortlsit);*/
Arrays.sort(players,(String s1,String s2)->(s1.compareTo(s2)));
Arrays.asList(players).forEach(s->System.out.print(s+" "));
}
6.lambda遍历list对象
@Test
public void test082703() {
//list.forEach((s)->System.out.printf("%s %s;",s.getUserName(),s.getPassWord()));
list.forEach(s->System.out.println(s.getPassWord()+" "+s.getUserName()));
}
7.lambda调用get、set
@Test
public void test082704() {
// Consumer<User> user=u->u.setUserName(u.getUserName()+"Test");
list.forEach(u->u.setUserName(u.getUserName()+"0828"));
list.forEach(s->System.out.println(s));
}
8.lambda定义过滤器
@Test
public void test082801() {
list.stream()
.filter(p->p.getUserName().equals("a"))
.limit(1)
.forEach(s->System.out.println(s.getPassWord()+" "));
}
9.lambda排序在stream中处理
@Test
public void test082803() {
// List<User> sortedJavaProgrammers =list.stream().sorted((p1,p2)->p1.getUserName().compareTo(p2.getUserName())).collect(Collectors.toList());
list.stream().sorted((p1,p2)->p1.getUserName().compareTo(p2.getUserName())).limit(2).collect(Collectors.toList()).forEach(p->System.out.println(p+" "));
// list.stream().sorted((p1,p2)->p1.getUserName().compareTo(p2.getUserName())).limit(2).forEach(p->System.out.println(p+" "));
}
10.stream自带方法max、min
@Test
public void test082804() {
User maxUser=list.stream().max((p1,p2)->p1.getUserName().length()-p2.getUserName().length()).get();
User minUser=list.stream().min((p1,p2)->p1.getUserName().length()-p2.getUserName().length()).get();
System.out.println(maxUser+" \n"+minUser);
}
11.stream将list对象类型转化成String(字符串型)/Set(无序不重复)/TreeSet类型(有序不重复)。
@Test
public void test082805() {
String strUser=list.stream().map(User::getUserName).collect(Collectors.joining(";"));
Set<String> setUser=list.stream().map(User::getUserName).collect(Collectors.toSet());
TreeSet<String> treeUser=list.stream().map(User::getUserName).collect(Collectors.toCollection(TreeSet::new));
int totalSalary =list.parallelStream().mapToInt(p->p.getUserName().length()).sum();
System.out.println(strUser+"\n"+setUser+"\n"+treeUser+"\n"+totalSalary);
}
12.获取对象值并取得getCount、getAverage、getMax、getSum等
@Test
public void test082806() {
List<Integer> intNum= Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) ;
IntSummaryStatistics summaryStatistics=intNum.stream().mapToInt(x->x).summaryStatistics();
System.out.println(summaryStatistics.getCount()+" "+summaryStatistics.getAverage()+" "+summaryStatistics.getMax());
}