19
New Features in JDK 8 Yann.xia

new features in jdk8

  • Upload
    -

  • View
    103

  • Download
    1

Embed Size (px)

Citation preview

New Features in JDK 8Yann.xia

CONTENTS

01Lambda Expressions

02Stream API

03Method Ref

04Others

01 Lambda Expressions

Lambda Expressions

• Lambdas 匿名表达式 (JSR 335)

• Example

(paramters) -> {body}

(x, y) -> x + y

Lambda Expressions

匿名类 Lambdas

new Thread(new Runnable() { @Override public void run() { System.out.print("hi"); }}).run();

new Thread(() -> System.out.print("hi")).run();

Lambda Expressions

Multiset<Integer> lengths = HashMultiset.create( FluentIterable.from(strings) .filter(new Predicate<String>() { public boolean apply(String string) { return CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string); } }) .transform(new Function<String, Integer>() { public Integer apply(String string) { return string.length(); } }));

匿名类 Lambdas

Multiset<Integer> lengths = HashMultiset.create( FluentIterable.from(strings) .filter(string -> CharMatcher.JAVA_UPPER_CASE.matchesAllOf(string)) .transform(string -> string.length()));

02 Stream API

Stream API

Common StreamList<Transaction> groceryTransactions = new Arraylist<>();for(Transaction t: transactions){ if(t.getType() == Transaction.GROCERY){ groceryTransactions.add(t); }}Collections.sort(groceryTransactions, new Comparator(){ public int compare(Transaction t1, Transaction t2){ return t2.getValue().compareTo(t1.getValue()); }});List<Integer> transactionIds = new ArrayList<>();for(Transaction t: groceryTransactions){ transactionsIds.add(t.getId());}

List<Integer> transactionsIds = transactions.stream() .filter(t -> t.getType() == Transaction.GROCERY) .sorted(comparing(Transaction::getValue).reversed()) .map(Transaction::getId) .collect(toList());

Stream API

Stream API

03 Method References

Method Referencespublic static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16); List<Integer> primeNumbers = numbers.stream().filter((x) -> isPrime(x)).collect(Collectors.toList());

System.out.println("Prime Numbers are " + primeNumbers);}

public static boolean isPrime(int number) {/*…*/

}

public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16); List<Integer> primeNumbers = numbers.stream().filter(ReferenceToStaticMethodExample::isPrime).collect(Collectors.toList());

System.out.println("Prime Numbers are " + primeNumbers);}

Method References

public static void main(String args[]){ List names = new ArrayList();

names.add("Mahesh"); names.add("Suresh"); names.add("Ramesh"); names.add("Naresh"); names.add("Kalpesh");

names.forEach(System.out::println);}

public static void main(String args[]){ List names = new ArrayList();

names.add("Mahesh"); names.add("Suresh"); names.add("Ramesh"); names.add("Naresh"); names.add("Kalpesh");

for (Object name : names){ System.out.print(name); }}

04 Others

Others- Date & Time

//Current DateLocalDate today = LocalDate.now();System.out.println("Current Date=" + today);

//Current TimeLocalTime time = LocalTime.now();System.out.println("Current Time=" + time);

//Current DateLocalDateTime today = LocalDateTime.now();System.out.println("Current DateTime=" + today);

Others – default & static

interface FunctionalDefaultMethods { void method(); //common

default void defaultMethod() { System.out.print(this); //default method }

static void staticMethod() { // static method }}

Others – Repeatable@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Filters { Filter[] value();}

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Repeatable(Filters.class)public @interface Filter { String value();}

@Filter("filter1")@Filter("filter2")public interface Filterable {}

Others – Param Name

class ParameterNames { public static void main(String[] args) throws Exception { Method method = ParameterNames.class.getMethod("main", String[].class); for (final Parameter parameter : method.getParameters()) { System.out.println("Parameter: " + parameter.getName()); } }}

编译时增加 – parameters

THANKS FOR WATCHING