之所以写博客。也是方便自己以后的查阅与帮助读者解决问题 废话不多说:
User.java
@Data
public class User {
private int id;
private String name;
private int age;
private String sex;
private int wage;
public User(int id, String name, int age, String sex, int wage) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.wage = wage;
}
}
JavaLambda.java
public class JavaLambda {
public static void main(String[] args) {
String[] str={"song","xian","yang","hui","liu","guo"};
stringArray(str);
anonymousInnerClass(str);
}
//采用Java8新特性 遍历数组与List
private static void stringArray(String [] str) {
//将数组转换成List
List<String> list = Arrays.asList(str);
//采用Lambda
list.forEach(s -> {
System.out.println(s+";");
});
System.out.println("---------------------");
//普通循环的方式
for (String s : list) {
System.out.println(s);
}
System.out.println("Java8排序");
}
//匿名内部类采用Java8
private static void anonymousInnerClass(String [] str) {
List<String> list = Arrays.asList(str);
//传统排序
list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println(list);
//采用Java8排序
list.sort((s1,s2)->(s1.compareTo(s2)));
System.out.println(list);
System.out.println("-----------------");
}
}
输出:
song;
xian;
yang;
hui;
liu;
guo;
---------------------
song
xian
yang
hui
liu
guo
Java8排序
[guo, hui, liu, song, xian, yang]
[guo, hui, liu, song, xian, yang]
-----------------
JavaStream.java
@Log4j2
public class JavaStream {
public static void main(String[] args) {
User user = new User(1, "song", 21, "女", 1000);
User user2 = new User(2, "song2", 22, "男", 2000);
User user3 = new User(3, "song3", 23, "男", 3000);
User user4 = new User(4, "song4", 24, "女", 4000);
List<User> userList = new ArrayList();
userList.add(user2);
userList.add(user);
userList.add(user4);
userList.add(user3);
//stream 表达式抽取一个字符作为一个集合
List<Integer> ids = userList.stream().map(User::getAge).collect(Collectors.toList());
System.out.println(ids);
//给用户加工资
Consumer<User> plusWages = u -> u.setWage(u.getWage() + 500);
userList.forEach(plusWages);
//Lambda表达式循环打印
userList.forEach(u -> {
System.out.println(u);
});
System.out.println("-----------------------");
//过滤一下工资小于3000的人员
List<User> collect1 = userList.stream().filter(u -> (u.getWage() >= 3000)).collect(Collectors.toList());
System.out.println(collect1);
System.out.println("过滤一下工资小于2000且性别是男性");
//
Predicate<User> filterWage = u -> (u.getWage() > 2000);
Predicate<User> filterSex = u -> ("男".equals(u.getSex()));
List<User> collect2 = userList.stream().filter(filterWage).filter(filterSex).collect(Collectors.toList());
System.out.println(collect2);
System.out.println("我只要集中的第一条数据");
List<User> collect3 = userList.stream().limit(1).collect(Collectors.toList());
System.out.println(collect3);
log.info("根据工资比较进行排序");
List<User> collect4 = userList.stream().sorted(((o1, o2) -> (o1.getWage() - o2.getWage()))).collect(Collectors.toList());
System.out.println(collect4);
log.info("根据name排序要前两条");
List<User> collect5 = userList.stream().sorted((o1, o2) -> (o1.getName().compareTo(o2.getName()))).limit(2).collect(Collectors.toList());
System.out.println(collect5);
log.info("工资最低的用户");
User userMin = userList.stream().min((o1, o2) -> (o1.getWage() - o2.getWage())).get();
System.out.println(userMin);
log.info("工资最高的用户");
User userMax = userList.stream().max((o1, o2) -> (o1.getWage() - o2.getWage())).get();
System.out.println(userMax);
log.info("集合对象中name抽取出来进行字符串*拼接");
String collect6 = userList.stream().map(User::getName).collect(Collectors.joining("*"));
System.out.println(collect6);
log.info("集合对象中name抽取出来放进set集合中");
Set<String> collect7 = userList.stream().map(User::getName).collect(Collectors.toSet());
System.out.println(collect7);
log.info("集合对象中name抽取出来放进TreeMap集合中");
TreeSet<String> collect8 = userList.stream().map(User::getName).collect(Collectors.toCollection(TreeSet::new));
System.out.println(collect8);
log.info("所有人wage总和");
int sum = userList.stream().mapToInt(User::getWage).sum();
System.out.println(sum);
log.info("一个集合中的 count min max sum");
IntSummaryStatistics intSummaryStatistics = userList.stream().mapToInt(User::getWage).summaryStatistics();
System.out.println(intSummaryStatistics.getMax());
System.out.println(intSummaryStatistics.getAverage());
System.out.println(intSummaryStatistics.getCount());
System.out.println(intSummaryStatistics.getMin());
System.out.println(intSummaryStatistics.getSum());
System.out.println(intSummaryStatistics.getClass());
}
}
输出:
[22, 21, 24, 23]
User(id=2, name=song2, age=22, sex=男, wage=2500)
User(id=1, name=song, age=21, sex=女, wage=1500)
User(id=4, name=song4, age=24, sex=女, wage=4500)
User(id=3, name=song3, age=23, sex=男, wage=3500)
-----------------------
[User(id=4, name=song4, age=24, sex=女, wage=4500), User(id=3, name=song3, age=23, sex=男, wage=3500)]
过滤一下工资小于2000且性别是男性
[User(id=2, name=song2, age=22, sex=男, wage=2500), User(id=3, name=song3, age=23, sex=男, wage=3500)]
我只要集中的第一条数据
[User(id=2, name=song2, age=22, sex=男, wage=2500)]
14:59:13.096 [main] INFO com.huatech.boot.JavaStream - 根据工资比较进行排序
[User(id=1, name=song, age=21, sex=女, wage=1500), User(id=2, name=song2, age=22, sex=男, wage=2500), User(id=3, name=song3, age=23, sex=男, wage=3500), User(id=4, name=song4, age=24, sex=女, wage=4500)]
14:59:13.100 [main] INFO com.huatech.boot.JavaStream - 根据name排序要前两条
[User(id=1, name=song, age=21, sex=女, wage=1500), User(id=2, name=song2, age=22, sex=男, wage=2500)]
14:59:13.100 [main] INFO com.huatech.boot.JavaStream - 工资最低的用户
User(id=1, name=song, age=21, sex=女, wage=1500)
14:59:13.100 [main] INFO com.huatech.boot.JavaStream - 工资最高的用户
User(id=4, name=song4, age=24, sex=女, wage=4500)
14:59:13.100 [main] INFO com.huatech.boot.JavaStream - 集合对象中name抽取出来进行字符串*拼接
song2*song*song4*song3
14:59:13.104 [main] INFO com.huatech.boot.JavaStream - 集合对象中name抽取出来放进set集合中
[song, song2, song3, song4]
14:59:13.104 [main] INFO com.huatech.boot.JavaStream - 集合对象中name抽取出来放进TreeMap集合中
[song, song2, song3, song4]
14:59:13.104 [main] INFO com.huatech.boot.JavaStream - 所有人wage总和
12000
14:59:13.104 [main] INFO com.huatech.boot.JavaStream - 一个集合中的 count min max sum
4500
3000.0
4
1500
12000
class java.util.IntSummaryStatistics