Java8 lambda 的使用
Java8 lambda 的使用
1.Java8 新特性介绍
原文链接 https://my.oschina.net/chenxiaobian/blog/704421,https://www.cnblogs.com/hmdrzql/p/6354010.html
现在我们有一个需求:给一个user组成的list 按照user的年龄排序。实现不难,代码如下:
UserCompare是一个实现了Comprator的类
这种方法由于sort方法的第二个参数是Comparator 所以你要写一个实现类(我这里是UserCompare类),并且override该接口的实现方法。
java8提供了lambda来简化,有了lambda程序员从此不加班呀~
刚才那个Comparator的实现类以及内部若干代码就都省了,代之以lambda表达式。
另外,IntelliJ会提示你改成更好的写法
实现类里有多少代码,你就省了多少行代码。
高兴了半天,到底是什么原理呢?其实是java8新提供的语法糖。
我们打开java1.8 Comparator的定义,发现了类定义上面多了一个@FunctionalInterface
对,1.8多了一个概念就是FunctionalInterface,这个Comparator就是一个FunctionalInterface
有了这个注解,原来使用实现类的地方就可以代之以lambda表达式。
写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下:
-
Lambda表达式
-
-
函数式接口
-
-
Stream
-
-
Optional
-
-
Predicate
-
-
Function
-
-
Consumer
-
-
Filter
-
-
Map-Reduce
-
-
新的Date API
最核心的当然是函数式编程了,写代码非常简单,请看下面详细例子介绍
2.Java8 lambda使用总结-结合实例介绍
很多同学一开始接触Java8可能对Java8 Lambda表达式有点陌生,下面我将结合实例介绍Java8的使用 并与Java7进行比较:
基础类
-
@Data
-
@Builder
-
@AllArgsConstructor
-
@NoArgsConstructor
-
public class Person {
-
-
private int id;
-
private String name;
-
private String address;
-
-
-
}
1.List操作
-
public class ExampleList {
-
private static List<String> items = new ArrayList<>();
-
-
static {
-
items.add("A");
-
items.add("BC");
-
items.add("C");
-
items.add("BD");
-
items.add("E");
-
}
-
-
public static void main(String[] args) {
-
//Java8之前操作List
-
for(String item:items){
-
System.out.println(item);
-
}
-
-
//Java8 lambda遍历list
-
items.forEach(c-> System.out.println(c));
-
-
items.forEach(item->{
-
if("C".equals(item)){
-
System.out.println(item);
-
}
-
});
-
-
System.out.println("--------");
-
-
//先过滤
-
items.stream().filter(s->s.contains("B")).forEach(c1-> System.out.println(c1));
-
-
}
-
}
2.Map操作
-
public class ExampleMap {
-
-
private static Map<String, Integer> items = new HashMap<>();
-
-
static {
-
items.put("A", 10);
-
items.put("B", 20);
-
items.put("C", 30);
-
items.put("D", 40);
-
items.put("E", 50);
-
items.put("F", 60);
-
}
-
-
public static void main(String[] args) {
-
-
//Java8之前遍历是这样遍历map
-
for(Map.Entry<String,Integer> entry:items.entrySet()){
-
System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
-
}
-
-
//Java8遍历map
-
items.forEach((key,value)-> System.out.println("key:" + key + " value:" + value));
-
-
-
}
-
-
-
}
3.Groupingby操作
-
/**
-
*
-
*Java8 Collectors.groupingBy and Collectors.mapping example
-
*/
-
public class ExampleMapping {
-
-
private static List<Person> personList = Lists.newArrayList();
-
-
static {
-
personList.add(Person.builder().id(10).address("apple").address("shanghai").build());
-
personList.add(Person.builder().id(12).address("apple").address("wuhan").build());
-
personList.add(Person.builder().id(16).address("apple").address("nanjing").build());
-
}
-
-
public static void main(String[] args) {
-
//分组
-
Map<String, List<Person>> collect = personList.stream().collect(Collectors.groupingBy(c -> c.getAddress()));
-
System.out.println(collect);
-
}
-
}
4.List转换为Map
-
public class ExampleListConvertMap {
-
-
private static List<Person> personList = Lists.newArrayList();
-
-
static{
-
personList.add(Person.builder().id(20).name("zhangsan").address("shanghai").build());
-
personList.add(Person.builder().id(30).name("lisi").address("nanjing").build());
-
}
-
-
public static void main(String[] args) {
-
//Java8 List转换Map
-
Map<Integer,Person> map_ = personList.stream().collect(Collectors.toMap((key->key.getId()),(value->value)));
-
map_.forEach((key,value)-> System.out.println(key + ":" + value));
-
-
Map<Integer, Person> mappedMovies = personList.stream().collect(
-
Collectors.toMap(Person::getRank, Person::getData));
-
-
}
-
}
5.FilterMap操作
-
public class ExampleFilterMap {
-
-
private static Map<Integer,String> map_ = Maps.newHashMap();
-
-
static{
-
map_.put(1, "linode.com");
-
map_.put(2, "heroku.com");
-
map_.put(3, "digitalocean.com");
-
map_.put(4, "aws.amazon.com");
-
}
-
-
public static void main(String[] args) {
-
//before java iterator map
-
String result = null;
-
for(Map.Entry<Integer,String> entry:map_.entrySet()){
-
if("heroku.com".equals(entry.getValue())){
-
result = entry.getValue();
-
}
-
}
-
-
System.out.println("Before Java 8 :" + result);
-
-
//Java8 Map->Stream->Filter->String
-
result = map_.entrySet().stream().
-
filter(map->"heroku.com".equals(map.getValue()))
-
.map(map->map.getValue())
-
.collect(Collectors.joining());
-
System.out.println("Java 8 :" + result);
-
-
Map<Integer,String> collect = map_.entrySet().stream()
-
.filter(c->c.getKey()==2)
-
.collect(Collectors.toMap(p->p.getKey(),p->p.getValue()));
-
System.out.println(collect);
-
-
}
-
}
6.Optional操作可以防止NullPointException
-
Optional<String> optional = Optional.of("hello");
-
System.out.println(optional.isPresent());//true
-
System.out.println(optional.get());//hello
-
System.out.println(optional.orElse("false"));
-
optional.ifPresent((s)-> System.out.println(s.charAt(0)));//h
7.给出一个详细的例子
-
@Data
-
@Builder
-
@AllArgsConstructor
-
@NoArgsConstructor
-
public class Employee {
-
-
private String name;
-
private int salary;
-
private String office;
-
}
-
-
-
public class ExampleEmployee {
-
-
private static List<Employee> employeeList = Lists.newArrayList();
-
-
static{
-
employeeList.add(Employee.builder().name("Matt").salary(5000).office("New York").build());
-
employeeList.add(Employee.builder().name("Steve").salary(6000).office("London").build());
-
employeeList.add(Employee.builder().name("Carrie").salary(20000).office("New York").build());
-
employeeList.add(Employee.builder().name("Peter").salary(7000).office("New York").build());
-
employeeList.add(Employee.builder().name("Pat").salary(8000).office("London").build());
-
employeeList.add(Employee.builder().name("Tammy").salary(29000).office("Shanghai").build());
-
}
-
-
public static void main(String[] args) {
-
//anyMatch
-
boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
-
System.out.println(isMatch);
-
-
//返回所有salary大于6000
-
boolean matched = employeeList.stream().allMatch(employee -> employee.getSalary()>4000);
-
System.out.println(matched);
-
-
//找出工资最高
-
Optional<Employee> hightestSalary = employeeList.stream().max((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
-
System.out.println(hightestSalary);
-
-
//返回姓名列表
-
List<String> names = employeeList.stream().map(employee -> employee.getName()).collect(Collectors.toList());
-
System.out.println(names);
-
-
//List转换成Map
-
Map<String,Employee> employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value)));
-
employeeMap.forEach((key,value)-> System.out.println(key + "=" + value));
-
-
//统计办公室是New York的个数
-
long officeCount = employeeList.stream().filter(employee -> employee.getOffice().equals("Shanghai")).count();
-
System.out.println(officeCount);
-
-
//List转换为Set
-
Set<String> officeSet = employeeList.stream().map(employee -> employee.getOffice()).distinct().collect(Collectors.toSet());
-
System.out.println(officeSet);
-
-
//查找办公室地点是New York的员工
-
Optional<Employee> allMatchedEmployees = employeeList.stream().filter(employee -> employee.getOffice().equals("New York")).findAny();
-
System.out.println(allMatchedEmployees);
-
-
//按照工资的降序来列出员工信息
-
List<Employee> sortEmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
-
//按照名字的升序列出员工信息
-
List<Employee> sortEmployeeByName = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
-
System.out.println(sortEmployeeList);
-
System.out.println("按照名字的升序列出员工信息:" + sortEmployeeByName);
-
-
//获取工资最高的前2条员工信息
-
List<Employee> top2EmployeeList= employeeList.stream()
-
.sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary()))
-
.limit(2)
-
.collect(Collectors.toList());
-
System.out.println(top2EmployeeList);
-
-
//获取平均工资
-
OptionalDouble averageSalary = employeeList.stream().mapToInt(employee->employee.getSalary()).average();
-
System.out.println("平均工资:" + averageSalary);
-
-
//查找New York
-
OptionalDouble averageSalaryByOffice = employeeList.stream().filter(employee -> employee.getOffice()
-
.equals("New York"))
-
.mapToInt(employee->employee.getSalary())
-
.average();
-
System.out.println("New York办公室平均工资:" + averageSalaryByOffice);
-
-
}
-
}
8.Java8常见操作
-
-
public class EmployeeTest {
-
-
public static List<Employee> generateData() {
-
return Arrays.asList(new Employee("Matt", 5000, "New York"),
-
new Employee("Steve", 6000, "London"),
-
new Employee("Carrie", 10000, "New York"),
-
new Employee("Peter", 7000, "New York"),
-
new Employee("Alec", 6000, "London"),
-
new Employee("Sarah", 8000, "London"),
-
new Employee("Rebecca", 4000, "New York"),
-
new Employee("Pat", 20000, "New York"),
-
new Employee("Tammy", 9000, "New York"),
-
new Employee("Fred", 15000, "Tokyo"));
-
}
-
-
public static Map<String, Integer> generateMapData() {
-
Map<String, Integer> items = Maps.newHashMap();
-
items.put("A", 10);
-
items.put("B", 20);
-
items.put("C", 30);
-
items.put("D", 40);
-
items.put("E", 50);
-
items.put("F", 60);
-
-
return items;
-
}
-
-
-
@Test
-
public void testEmployee() {
-
List<Employee> results = generateData();
-
-
//打印出名字是Steve的员工信息
-
results.forEach(c -> {
-
if (c.getName().equals("Steve")) {
-
System.out.println(c);
-
}
-
});
-
-
System.out.println("---------");
-
-
//找出年薪超过6000的员工
-
results.stream().filter(c -> c.getSalary() >= 60000).forEach(c -> System.out.println(c));
-
-
System.out.println("--->>>>>>----");
-
-
//java8遍历map
-
Map<String, Integer> map_ = generateMapData();
-
map_.forEach((key, value) -> System.out.println("key:" + key + "," + "value:" + value));
-
-
System.out.println("---->>>>分组>>>-----");
-
-
//java8 分组操作
-
Map<String, List<Employee>> groupMap = results.stream().collect(Collectors.groupingBy(c -> c.getOffice()));
-
System.out.println(groupMap);
-
-
System.out.println("---->>>>List转化为Map>>>----");
-
//List转化Map
-
Map<String, Object> map = results.stream().collect(Collectors.toMap(Employee::getName, Employee::getOffice));
-
map.forEach((key, value) -> System.out.println("key:" + key + "," + "value:" + value));
-
-
System.out.println("---->>>>>>>----");
-
Map<Integer, Employee> employeeMap = results.stream().collect(Collectors.toMap((key -> key.getSalary()), (value -> value)));
-
employeeMap.forEach((key, value) -> System.out.println(key + "," + value));
-
-
System.out.println("---->>遍历map>>>----");
-
//打印出值大于30的map
-
Map<String, Integer> resultMap = map_.entrySet().stream().filter(c -> c.getValue() > 30).collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
-
resultMap.forEach((key, value) -> System.out.println(key + "=" + value));
-
-
System.out.println(">>>>>>>>>>>>>>>");
-
//打印key=D的map
-
Map<String, Integer> mapResults = map_.entrySet().stream().filter(c -> c.getKey().equals("D")).collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
-
mapResults.forEach((key, value) -> System.out.println(key + ">>>>" + value));
-
-
System.out.println(">>>>>>>Optional>>>>>>>");
-
Optional<String> optional = Optional.of("hello");
-
System.out.println(optional.isPresent());
-
-
}
-
-
@Test
-
public void testEmployeeExample() {
-
//anyMatch
-
List<Employee> employeeList = generateData();
-
boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
-
System.out.println(isMatch);
-
-
//allMatch
-
boolean matched = employeeList.stream().allMatch(employee -> employee.getOffice().equals("London"));
-
System.out.println(matched);
-
-
//找出工资最高的
-
Optional<Employee> employeeOptional = employeeList.stream().max((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
-
System.out.println(employeeOptional);
-
-
//找出工资最少的
-
Optional<Employee> employee = employeeList.stream().min((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
-
System.out.println(employee);
-
-
//返回姓名列表
-
List<String> names = employeeList.stream().map(c->c.getName()).collect(Collectors.toList());
-
System.out.println(names);
-
-
System.out.println(">>>>>>>>>>>");
-
//List转化Map
-
Map<String,Employee> employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value)));
-
employeeMap.forEach((key,value)-> System.out.println(key + "=" + value));
-
-
//统计办公室是New York的个数
-
long officeCount = employeeList.stream().filter(c->c.getOffice().equals("New York")).count();
-
System.out.println(officeCount);
-
-
long salaryCount = employeeList.stream().filter(c->c.getSalary()>60000).count();
-
System.out.println(salaryCount);
-
-
//List转化为Set
-
Set<String> officeSet = employeeList.stream().map(c->c.getOffice()).distinct().collect(Collectors.toSet());
-
System.out.println(officeSet);
-
-
Set<Integer> salarySet = employeeList.stream().map(c->c.getSalary()).distinct().collect(Collectors.toSet());
-
System.out.println(salarySet);
-
-
//查找办公室地点是New York的员工
-
Optional<Employee> optionals = employeeList.stream().filter(c->c.getOffice().equals("New York")).findAny();
-
System.out.println(optionals);
-
-
System.out.println(">>>>>工资降序排序>>>>>");
-
//按照工资的降序来列出员工信息
-
List<Employee> sortSalaryEmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
-
System.out.println(sortSalaryEmployeeList);
-
-
System.out.println(">>>>>姓名升序排序>>>>>");
-
List<Employee> sortNameEmployeeList = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
-
System.out.println(sortNameEmployeeList);
-
-
System.out.println(">>>>获取工资最高的前2条员工信息");
-
List<Employee> dispaly2EmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).limit(2).collect(Collectors.toList());
-
System.out.println(dispaly2EmployeeList);
-
-
System.out.println(">>>>获取平均工资");
-
OptionalDouble averageSalary = employeeList.stream().mapToInt(c->c.getSalary()).average();
-
System.out.println(averageSalary);
-
-
System.out.println(">>>>获取工作地点的平均工资");
-
OptionalDouble optionalDouble = employeeList.stream().filter(c->c.getOffice().equals("New York")).mapToInt(c->c.getSalary()).average();
-
System.out.println(optionalDouble);
-
-
System.out.println(">>>>>>Java8 Optional用法>>>>>>");
-
Optional<String> stringOptional = Optional.of("test");
-
System.out.println(stringOptional.get());
-
-
Optional<String> isOptional = Optional.ofNullable("hello");
-
System.out.println(isOptional.isPresent());
-
System.out.println(isOptional.get());
-
System.out.println(isOptional.orElse("0"));
-
-
System.out.println(">>>>>>>>>>>>");
-
//Optional<String> optionalVal = Optional.of(null);
-
// System.out.println(optionalVal);
-
Optional<String> optional = Optional.ofNullable("optional");
-
System.out.println(optional);
-
System.out.println(optional.isPresent());
-
System.out.println(optional.get());
-
System.out.println(optional.orElse("haha"));
-
System.out.println(">>>>>>>>>>>>");
-
-
Optional<Employee> employeeOptional_ = employeeList.stream().filter(c->c.getOffice().equals("New York")).findFirst();
-
System.out.println(employeeOptional_);
-
-
1.Java8 新特性介绍
原文链接 https://my.oschina.net/chenxiaobian/blog/704421,https://www.cnblogs.com/hmdrzql/p/6354010.html
现在我们有一个需求:给一个user组成的list 按照user的年龄排序。实现不难,代码如下:
UserCompare是一个实现了Comprator的类
这种方法由于sort方法的第二个参数是Comparator 所以你要写一个实现类(我这里是UserCompare类),并且override该接口的实现方法。
java8提供了lambda来简化,有了lambda程序员从此不加班呀~
刚才那个Comparator的实现类以及内部若干代码就都省了,代之以lambda表达式。
另外,IntelliJ会提示你改成更好的写法
实现类里有多少代码,你就省了多少行代码。
高兴了半天,到底是什么原理呢?其实是java8新提供的语法糖。
我们打开java1.8 Comparator的定义,发现了类定义上面多了一个@FunctionalInterface
对,1.8多了一个概念就是FunctionalInterface,这个Comparator就是一个FunctionalInterface
有了这个注解,原来使用实现类的地方就可以代之以lambda表达式。
写java的同学对java8肯定知道 那么java8到底有哪些特性呢,总结如下:
-
Lambda表达式
-
-
函数式接口
-
-
Stream
-
-
Optional
-
-
Predicate
-
-
Function
-
-
Consumer
-
-
Filter
-
-
Map-Reduce
-
-
新的Date API
最核心的当然是函数式编程了,写代码非常简单,请看下面详细例子介绍
2.Java8 lambda使用总结-结合实例介绍
很多同学一开始接触Java8可能对Java8 Lambda表达式有点陌生,下面我将结合实例介绍Java8的使用 并与Java7进行比较:
基础类
-
@Data
-
@Builder
-
@AllArgsConstructor
-
@NoArgsConstructor
-
public class Person {
-
-
private int id;
-
private String name;
-
private String address;
-
-
-
}
1.List操作
-
public class ExampleList {
-
private static List<String> items = new ArrayList<>();
-
-
static {
-
items.add("A");
-
items.add("BC");
-
items.add("C");
-
items.add("BD");
-
items.add("E");
-
}
-
-
public static void main(String[] args) {
-
//Java8之前操作List
-
for(String item:items){
-
System.out.println(item);
-
}
-
-
//Java8 lambda遍历list
-
items.forEach(c-> System.out.println(c));
-
-
items.forEach(item->{
-
if("C".equals(item)){
-
System.out.println(item);
-
}
-
});
-
-
System.out.println("--------");
-
-
//先过滤
-
items.stream().filter(s->s.contains("B")).forEach(c1-> System.out.println(c1));
-
-
}
-
}
2.Map操作
-
public class ExampleMap {
-
-
private static Map<String, Integer> items = new HashMap<>();
-
-
static {
-
items.put("A", 10);
-
items.put("B", 20);
-
items.put("C", 30);
-
items.put("D", 40);
-
items.put("E", 50);
-
items.put("F", 60);
-
}
-
-
public static void main(String[] args) {
-
-
//Java8之前遍历是这样遍历map
-
for(Map.Entry<String,Integer> entry:items.entrySet()){
-
System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
-
}
-
-
//Java8遍历map
-
items.forEach((key,value)-> System.out.println("key:" + key + " value:" + value));
-
-
-
}
-
-
-
}
3.Groupingby操作
-
/**
-
*
-
*Java8 Collectors.groupingBy and Collectors.mapping example
-
*/
-
public class ExampleMapping {
-
-
private static List<Person> personList = Lists.newArrayList();
-
-
static {
-
personList.add(Person.builder().id(10).address("apple").address("shanghai").build());
-
personList.add(Person.builder().id(12).address("apple").address("wuhan").build());
-
personList.add(Person.builder().id(16).address("apple").address("nanjing").build());
-
}
-
-
public static void main(String[] args) {
-
//分组
-
Map<String, List<Person>> collect = personList.stream().collect(Collectors.groupingBy(c -> c.getAddress()));
-
System.out.println(collect);
-
}
-
}
4.List转换为Map
-
public class ExampleListConvertMap {
-
-
private static List<Person> personList = Lists.newArrayList();
-
-
static{
-
personList.add(Person.builder().id(20).name("zhangsan").address("shanghai").build());
-
personList.add(Person.builder().id(30).name("lisi").address("nanjing").build());
-
}
-
-
public static void main(String[] args) {
-
//Java8 List转换Map
-
Map<Integer,Person> map_ = personList.stream().collect(Collectors.toMap((key->key.getId()),(value->value)));
-
map_.forEach((key,value)-> System.out.println(key + ":" + value));
-
-
Map<Integer, Person> mappedMovies = personList.stream().collect(
-
Collectors.toMap(Person::getRank, Person::getData));
-
-
}
-
}
5.FilterMap操作
-
public class ExampleFilterMap {
-
-
private static Map<Integer,String> map_ = Maps.newHashMap();
-
-
static{
-
map_.put(1, "linode.com");
-
map_.put(2, "heroku.com");
-
map_.put(3, "digitalocean.com");
-
map_.put(4, "aws.amazon.com");
-
}
-
-
public static void main(String[] args) {
-
//before java iterator map
-
String result = null;
-
for(Map.Entry<Integer,String> entry:map_.entrySet()){
-
if("heroku.com".equals(entry.getValue())){
-
result = entry.getValue();
-
}
-
}
-
-
System.out.println("Before Java 8 :" + result);
-
-
//Java8 Map->Stream->Filter->String
-
result = map_.entrySet().stream().
-
filter(map->"heroku.com".equals(map.getValue()))
-
.map(map->map.getValue())
-
.collect(Collectors.joining());
-
System.out.println("Java 8 :" + result);
-
-
Map<Integer,String> collect = map_.entrySet().stream()
-
.filter(c->c.getKey()==2)
-
.collect(Collectors.toMap(p->p.getKey(),p->p.getValue()));
-
System.out.println(collect);
-
-
}
-
}
6.Optional操作可以防止NullPointException
-
Optional<String> optional = Optional.of("hello");
-
System.out.println(optional.isPresent());//true
-
System.out.println(optional.get());//hello
-
System.out.println(optional.orElse("false"));
-
optional.ifPresent((s)-> System.out.println(s.charAt(0)));//h
7.给出一个详细的例子
-
@Data
-
@Builder
-
@AllArgsConstructor
-
@NoArgsConstructor
-
public class Employee {
-
-
private String name;
-
private int salary;
-
private String office;
-
}
-
-
-
public class ExampleEmployee {
-
-
private static List<Employee> employeeList = Lists.newArrayList();
-
-
static{
-
employeeList.add(Employee.builder().name("Matt").salary(5000).office("New York").build());
-
employeeList.add(Employee.builder().name("Steve").salary(6000).office("London").build());
-
employeeList.add(Employee.builder().name("Carrie").salary(20000).office("New York").build());
-
employeeList.add(Employee.builder().name("Peter").salary(7000).office("New York").build());
-
employeeList.add(Employee.builder().name("Pat").salary(8000).office("London").build());
-
employeeList.add(Employee.builder().name("Tammy").salary(29000).office("Shanghai").build());
-
}
-
-
public static void main(String[] args) {
-
//anyMatch
-
boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
-
System.out.println(isMatch);
-
-
//返回所有salary大于6000
-
boolean matched = employeeList.stream().allMatch(employee -> employee.getSalary()>4000);
-
System.out.println(matched);
-
-
//找出工资最高
-
Optional<Employee> hightestSalary = employeeList.stream().max((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
-
System.out.println(hightestSalary);
-
-
//返回姓名列表
-
List<String> names = employeeList.stream().map(employee -> employee.getName()).collect(Collectors.toList());
-
System.out.println(names);
-
-
//List转换成Map
-
Map<String,Employee> employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value)));
-
employeeMap.forEach((key,value)-> System.out.println(key + "=" + value));
-
-
//统计办公室是New York的个数
-
long officeCount = employeeList.stream().filter(employee -> employee.getOffice().equals("Shanghai")).count();
-
System.out.println(officeCount);
-
-
//List转换为Set
-
Set<String> officeSet = employeeList.stream().map(employee -> employee.getOffice()).distinct().collect(Collectors.toSet());
-
System.out.println(officeSet);
-
-
//查找办公室地点是New York的员工
-
Optional<Employee> allMatchedEmployees = employeeList.stream().filter(employee -> employee.getOffice().equals("New York")).findAny();
-
System.out.println(allMatchedEmployees);
-
-
//按照工资的降序来列出员工信息
-
List<Employee> sortEmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
-
//按照名字的升序列出员工信息
-
List<Employee> sortEmployeeByName = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
-
System.out.println(sortEmployeeList);
-
System.out.println("按照名字的升序列出员工信息:" + sortEmployeeByName);
-
-
//获取工资最高的前2条员工信息
-
List<Employee> top2EmployeeList= employeeList.stream()
-
.sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary()))
-
.limit(2)
-
.collect(Collectors.toList());
-
System.out.println(top2EmployeeList);
-
-
//获取平均工资
-
OptionalDouble averageSalary = employeeList.stream().mapToInt(employee->employee.getSalary()).average();
-
System.out.println("平均工资:" + averageSalary);
-
-
//查找New York
-
OptionalDouble averageSalaryByOffice = employeeList.stream().filter(employee -> employee.getOffice()
-
.equals("New York"))
-
.mapToInt(employee->employee.getSalary())
-
.average();
-
System.out.println("New York办公室平均工资:" + averageSalaryByOffice);
-
-
}
-
}
8.Java8常见操作
-
-
public class EmployeeTest {
-
-
public static List<Employee> generateData() {
-
return Arrays.asList(new Employee("Matt", 5000, "New York"),
-
new Employee("Steve", 6000, "London"),
-
new Employee("Carrie", 10000, "New York"),
-
new Employee("Peter", 7000, "New York"),
-
new Employee("Alec", 6000, "London"),
-
new Employee("Sarah", 8000, "London"),
-
new Employee("Rebecca", 4000, "New York"),
-
new Employee("Pat", 20000, "New York"),
-
new Employee("Tammy", 9000, "New York"),
-
new Employee("Fred", 15000, "Tokyo"));
-
}
-
-
public static Map<String, Integer> generateMapData() {
-
Map<String, Integer> items = Maps.newHashMap();
-
items.put("A", 10);
-
items.put("B", 20);
-
items.put("C", 30);
-
items.put("D", 40);
-
items.put("E", 50);
-
items.put("F", 60);
-
-
return items;
-
}
-
-
-
@Test
-
public void testEmployee() {
-
List<Employee> results = generateData();
-
-
//打印出名字是Steve的员工信息
-
results.forEach(c -> {
-
if (c.getName().equals("Steve")) {
-
System.out.println(c);
-
}
-
});
-
-
System.out.println("---------");
-
-
//找出年薪超过6000的员工
-
results.stream().filter(c -> c.getSalary() >= 60000).forEach(c -> System.out.println(c));
-
-
System.out.println("--->>>>>>----");
-
-
//java8遍历map
-
Map<String, Integer> map_ = generateMapData();
-
map_.forEach((key, value) -> System.out.println("key:" + key + "," + "value:" + value));
-
-
System.out.println("---->>>>分组>>>-----");
-
-
//java8 分组操作
-
Map<String, List<Employee>> groupMap = results.stream().collect(Collectors.groupingBy(c -> c.getOffice()));
-
System.out.println(groupMap);
-
-
System.out.println("---->>>>List转化为Map>>>----");
-
//List转化Map
-
Map<String, Object> map = results.stream().collect(Collectors.toMap(Employee::getName, Employee::getOffice));
-
map.forEach((key, value) -> System.out.println("key:" + key + "," + "value:" + value));
-
-
System.out.println("---->>>>>>>----");
-
Map<Integer, Employee> employeeMap = results.stream().collect(Collectors.toMap((key -> key.getSalary()), (value -> value)));
-
employeeMap.forEach((key, value) -> System.out.println(key + "," + value));
-
-
System.out.println("---->>遍历map>>>----");
-
//打印出值大于30的map
-
Map<String, Integer> resultMap = map_.entrySet().stream().filter(c -> c.getValue() > 30).collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
-
resultMap.forEach((key, value) -> System.out.println(key + "=" + value));
-
-
System.out.println(">>>>>>>>>>>>>>>");
-
//打印key=D的map
-
Map<String, Integer> mapResults = map_.entrySet().stream().filter(c -> c.getKey().equals("D")).collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue()));
-
mapResults.forEach((key, value) -> System.out.println(key + ">>>>" + value));
-
-
System.out.println(">>>>>>>Optional>>>>>>>");
-
Optional<String> optional = Optional.of("hello");
-
System.out.println(optional.isPresent());
-
-
}
-
-
@Test
-
public void testEmployeeExample() {
-
//anyMatch
-
List<Employee> employeeList = generateData();
-
boolean isMatch = employeeList.stream().anyMatch(employee -> employee.getOffice().equals("London"));
-
System.out.println(isMatch);
-
-
//allMatch
-
boolean matched = employeeList.stream().allMatch(employee -> employee.getOffice().equals("London"));
-
System.out.println(matched);
-
-
//找出工资最高的
-
Optional<Employee> employeeOptional = employeeList.stream().max((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
-
System.out.println(employeeOptional);
-
-
//找出工资最少的
-
Optional<Employee> employee = employeeList.stream().min((e1,e2)->Integer.compare(e1.getSalary(),e2.getSalary()));
-
System.out.println(employee);
-
-
//返回姓名列表
-
List<String> names = employeeList.stream().map(c->c.getName()).collect(Collectors.toList());
-
System.out.println(names);
-
-
System.out.println(">>>>>>>>>>>");
-
//List转化Map
-
Map<String,Employee> employeeMap = employeeList.stream().collect(Collectors.toMap((key->key.getName()),(value->value)));
-
employeeMap.forEach((key,value)-> System.out.println(key + "=" + value));
-
-
//统计办公室是New York的个数
-
long officeCount = employeeList.stream().filter(c->c.getOffice().equals("New York")).count();
-
System.out.println(officeCount);
-
-
long salaryCount = employeeList.stream().filter(c->c.getSalary()>60000).count();
-
System.out.println(salaryCount);
-
-
//List转化为Set
-
Set<String> officeSet = employeeList.stream().map(c->c.getOffice()).distinct().collect(Collectors.toSet());
-
System.out.println(officeSet);
-
-
Set<Integer> salarySet = employeeList.stream().map(c->c.getSalary()).distinct().collect(Collectors.toSet());
-
System.out.println(salarySet);
-
-
//查找办公室地点是New York的员工
-
Optional<Employee> optionals = employeeList.stream().filter(c->c.getOffice().equals("New York")).findAny();
-
System.out.println(optionals);
-
-
System.out.println(">>>>>工资降序排序>>>>>");
-
//按照工资的降序来列出员工信息
-
List<Employee> sortSalaryEmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).collect(Collectors.toList());
-
System.out.println(sortSalaryEmployeeList);
-
-
System.out.println(">>>>>姓名升序排序>>>>>");
-
List<Employee> sortNameEmployeeList = employeeList.stream().sorted((e1,e2)->e1.getName().compareTo(e2.getName())).collect(Collectors.toList());
-
System.out.println(sortNameEmployeeList);
-
-
System.out.println(">>>>获取工资最高的前2条员工信息");
-
List<Employee> dispaly2EmployeeList = employeeList.stream().sorted((e1,e2)->Integer.compare(e2.getSalary(),e1.getSalary())).limit(2).collect(Collectors.toList());
-
System.out.println(dispaly2EmployeeList);
-
-
System.out.println(">>>>获取平均工资");
-
OptionalDouble averageSalary = employeeList.stream().mapToInt(c->c.getSalary()).average();
-
System.out.println(averageSalary);
-
-
System.out.println(">>>>获取工作地点的平均工资");
-
OptionalDouble optionalDouble = employeeList.stream().filter(c->c.getOffice().equals("New York")).mapToInt(c->c.getSalary()).average();
-
System.out.println(optionalDouble);
-
-
System.out.println(">>>>>>Java8 Optional用法>>>>>>");
-
Optional<String> stringOptional = Optional.of("test");
-
System.out.println(stringOptional.get());
-
-
Optional<String> isOptional = Optional.ofNullable("hello");
-
System.out.println(isOptional.isPresent());
-
System.out.println(isOptional.get());
-
System.out.println(isOptional.orElse("0"));
-
-
System.out.println(">>>>>>>>>>>>");
-
//Optional<String> optionalVal = Optional.of(null);
-
// System.out.println(optionalVal);
-
Optional<String> optional = Optional.ofNullable("optional");
-
System.out.println(optional);
-
System.out.println(optional.isPresent());
-
System.out.println(optional.get());
-
System.out.println(optional.orElse("haha"));
-
System.out.println(">>>>>>>>>>>>");
-
-
Optional<Employee> employeeOptional_ = employeeList.stream().filter(c->c.getOffice().equals("New York")).findFirst();
-
System.out.println(employeeOptional_);
-
-