2018-05-22 14:25:27 598浏览
今天扣丁学堂给大家介绍一下关于Java8新特性,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API等内容,下面我们一起来看一下吧。interfaceFormula{
doublecalculate(inta);
defaultdoublesqrt(inta){
returnMath.sqrt(a);
}
}
Formulaformula=newFormula(){
@Override
publicdoublecalculate(inta){
returnsqrt(a*100);
}
};
formula.calculate(100);//100.0
formula.sqrt(16);//4.0
List<String>names=Arrays.asList("peter","anna","mike","xenia");
Collections.sort(names,newComparator<String>(){
@Override
publicintcompare(Stringa,Stringb){
returnb.compareTo(a);
}
});
Collections.sort(names,(Stringa,Stringb)->{
returnb.compareTo(a);
});
Collections.sort(names,(Stringa,Stringb)->b.compareTo(a));
Collections.sort(names,(a,b)->b.compareTo(a));
@FunctionalInterface
interfaceConverter<F,T>{
Tconvert(Ffrom);
}
Converter<String,Integer>converter=(from)->Integer.valueOf(from);
Integerconverted=converter.convert("123");
System.out.println(converted);//123
Converter<String,Integer>converter=Integer::valueOf;
Integerconverted=converter.convert("123");
System.out.println(converted);//123
converter=something::startsWith
Stringconverted=converter.convert("Java");
System.out.println(converted);//"J"
classPerson{
StringfirstName;
StringlastName;
Person(){}
Person(StringfirstName,StringlastName){
this.firstName=firstName;
this.lastName=lastName;
}
}
interfacePersonFactory<PextendsPerson>{
Pcreate(StringfirstName,StringlastName);
}
PersonFactory<Person>personFactory=Person::new;
Personperson=personFactory.create("Peter","Parker");
finalintnum=1; Converter<Integer,String>stringConverter= (from)->String.valueOf(from+num); stringConverter.convert(2);//3
intnum=1; Converter<Integer,String>stringConverter= (from)->String.valueOf(from+num); stringConverter.convert(2);//3
intnum=1; Converter<Integer,String>stringConverter= (from)->String.valueOf(from+num); num=3;
  classLambda4{
  staticintouterStaticNum;
  intouterNum;
  voidtestScopes(){
  Converter<Integer,String>stringConverter1=(from)->{
  outerNum=23;
  returnString.valueOf(from);
  };
  Converter<Integer,String>stringConverter2=(from)->{
  outerStaticNum=72;
  returnString.valueOf(from);
  };
  }
  }
Formulaformula=(a)->sqrt(a*100); Built-inFunctionalInterfaces
  Predicate<String>predicate=(s)->s.length()>0;
  predicate.test("foo");//true
  predicate.negate().test("foo");//false
  Predicate<Boolean>nonNull=Objects::nonNull;
  Predicate<Boolean>isNull=Objects::isNull;
  Predicate<String>isEmpty=String::isEmpty;
  Predicate<String>isNotEmpty=isEmpty.negate();
Function<String,Integer>toInteger=Integer::valueOf;
Function<String,String>backToString=toInteger.andThen(String::valueOf);
backToString.apply("123");//"123"
Supplier<Person>personSupplier=Person::new; personSupplier.get();//newPerson
Consumer<Person>greeter=(p)->System.out.println("Hello,"+p.firstName);
greeter.accept(newPerson("Luke","Skywalker"));
Comparator<Person>comparator=(p1,p2)->p1.firstName.compareTo(p2.firstName);
Personp1=newPerson("John","Doe");
Personp2=newPerson("Alice","Wonderland");
comparator.compare(p1,p2);//>0
comparator.reversed().compare(p1,p2);//<0
Optional<String>optional=Optional.of("bam");
optional.isPresent();//true
optional.get();//"bam"
optional.orElse("fallback");//"bam"
optional.ifPresent((s)->System.out.println(s.charAt(0)));//"b"
List<String>stringCollection=newArrayList<>();
stringCollection.add("ddd2");
stringCollection.add("aaa2");
stringCollection.add("bbb1");
stringCollection.add("aaa1");
stringCollection.add("bbb3");
stringCollection.add("ccc");
stringCollection.add("bbb2");
stringCollection.add("ddd1");
stringCollection
.stream()
.filter((s)->s.startsWith("a"))
.forEach(System.out::println);
//"aaa2","aaa1"
stringCollection
.stream()
.sorted()
.filter((s)->s.startsWith("a"))
.forEach(System.out::println);
//"aaa1","aaa2"
System.out.println(stringCollection); //ddd2,aaa2,bbb1,aaa1,bbb3,ccc,bbb2,ddd1
stringCollection .stream() .map(String::toUpperCase) .sorted((a,b)->b.compareTo(a)) .forEach(System.out::println); //"DDD2","DDD1","CCC","BBB3","BBB2","AAA2","AAA1"
  booleananyStartsWithA=
  stringCollection
  .stream()
  .anyMatch((s)->s.startsWith("a"));
  System.out.println(anyStartsWithA);//true
  booleanallStartsWithA=
  stringCollection
  .stream()
  .allMatch((s)->s.startsWith("a"));
  System.out.println(allStartsWithA);//false
  booleannoneStartsWithZ=
  stringCollection
  .stream()
  .noneMatch((s)->s.startsWith("z"));
  System.out.println(noneStartsWithZ);//true
longstartsWithB=
stringCollection
.stream()
.filter((s)->s.startsWith("b"))
.count();
System.out.println(startsWithB);//3
Reduce规约
Optional<String>reduced= stringCollection .stream() .sorted() .reduce((s1,s2)->s1+"#"+s2); reduced.ifPresent(System.out::println); //"aaa1#aaa2#bbb1#bbb2#bbb3#ccc#ddd1#ddd2"
intmax=1000000;
List<String>values=newArrayList<>(max);
for(inti=0;i<max;i++){
UUIDuuid=UUID.randomUUID();
values.add(uuid.toString());
}
longt0=System.nanoTime();
longcount=values.stream().sorted().count();
System.out.println(count);
longt1=System.nanoTime();
longmillis=TimeUnit.NANOSECONDS.toMillis(t1-t0);
System.out.println(String.format("sequentialsorttook:%dms",millis));
//串行耗时:899ms
  longt0=System.nanoTime();
  longcount=values.parallelStream().sorted().count();
  System.out.println(count);
  longt1=System.nanoTime();
  longmillis=TimeUnit.NANOSECONDS.toMillis(t1-t0);
  System.out.println(String.format("parallelsorttook:%dms",millis));
  //并行排序耗时:472ms
Map<Integer,String>map=newHashMap<>();
for(inti=0;i<10;i++){
map.putIfAbsent(i,"val"+i);
}
map.forEach((id,val)->System.out.println(val));
map.computeIfPresent(3,(num,val)->val+num); map.get(3);//val33 map.computeIfPresent(9,(num,val)->null); map.containsKey(9);//false map.computeIfAbsent(23,num->"val"+num); map.containsKey(23);//true map.computeIfAbsent(3,num->"bam"); map.get(3);//val33
map.remove(3,"val3"); map.get(3);//val33 map.remove(3,"val33"); map.get(3);//null
以上就是关于Java8的新特性的详细介绍,希望能给大家一个参考。想要了解更多内容的小伙伴可以登录扣丁学堂官网了解更多内容。扣丁学堂是专业的Java培训机构,不仅有专业的老师和与时俱进的课程体系,还有大量的Java视频教程供学员观看学习,想要学习Java的小伙伴快快行动吧。Java技术交流群:670348138。
	
		
	
		
	
【关注微信公众号获取更多学习资料】