2018-05-22 14:25:27 576浏览
今天扣丁学堂给大家介绍一下关于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。
【关注微信公众号获取更多学习资料】