├── _config.yml ├── .gitignore ├── script └── script.js ├── src └── com │ └── sumit │ └── learn │ ├── java8 │ ├── UseFunctionalInterface.java │ ├── UseDefaultMethod.java │ ├── UseStaticDefaultMethod.java │ ├── ArrayToStream.java │ ├── UseOfForEachMethod.java │ ├── UseParallelStream.java │ ├── CountItem.java │ ├── UseStringJoinMethod.java │ ├── UseStaticMethodReference.java │ ├── UseSequentialStream.java │ ├── UseOptional.java │ ├── UseNashornExecuteJsFile.java │ ├── UseIntanceAndDurationTimeApi.java │ ├── UserInstanceMethodReference.java │ ├── UseZonedDateTime.java │ ├── SumAndAgreegate.java │ ├── UseTimeFormatter.java │ ├── UseNashorn.java │ ├── DateAndTime.java │ ├── UseStringJoinerClass.java │ └── UseDateFormatter.java │ └── model │ └── Person.java └── README.md /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | .classpath 3 | .project 4 | .settings/ 5 | .DS_Store -------------------------------------------------------------------------------- /script/script.js: -------------------------------------------------------------------------------- 1 | var welcome = "Welcome to nashorn, an awesome js engine"; 2 | java.lang.System.out.println(welcome); 3 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseFunctionalInterface.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | public class UseFunctionalInterface { 4 | 5 | public static void main(String[] args) { 6 | printSomething(() -> System.out.print("Awesome"));; 7 | } 8 | 9 | static void printSomething(DoSomething something) { 10 | something.doSomething(); 11 | } 12 | 13 | } 14 | 15 | //Optional annotation 16 | @FunctionalInterface 17 | interface DoSomething { 18 | void doSomething(); 19 | } -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseDefaultMethod.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | public class UseDefaultMethod { 4 | 5 | public static void main(String[] args) { 6 | Animal cat = new Cat(); 7 | System.out.println(cat.getInfo()); 8 | } 9 | } 10 | 11 | interface Animal { 12 | public String getName(); 13 | default String getInfo() { 14 | return "Animal name type " + getName(); 15 | } 16 | } 17 | 18 | class Cat implements Animal { 19 | @Override 20 | public String getName() { 21 | return "Cat"; 22 | } 23 | } -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseStaticDefaultMethod.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | public class UseStaticDefaultMethod { 4 | public static void main(String[] args) { 5 | Country.newInstance("India"); 6 | } 7 | } 8 | 9 | interface Country { 10 | String getName(); 11 | static Country newInstance(String name) { 12 | if("India".equalsIgnoreCase(name)) { 13 | return new India(); 14 | }else { 15 | return null; 16 | } 17 | } 18 | } 19 | 20 | class India implements Country { 21 | 22 | @Override 23 | public String getName() { 24 | return "India"; 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/ArrayToStream.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.Arrays; 4 | import java.util.stream.Stream; 5 | 6 | import com.sumit.learn.model.Person; 7 | 8 | public class ArrayToStream { 9 | 10 | public static void main(String[] args) { 11 | Person[] persons = new Person[] { 12 | new Person(24,"Bom"), 13 | new Person(27,"Mike") 14 | }; 15 | 16 | //Stream stream = Stream.of(persons); 17 | 18 | //Second way 19 | Stream stream = Arrays.stream(persons); 20 | stream.forEach(p -> System.out.println(p)); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/com/sumit/learn/model/Person.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.model; 2 | 3 | public class Person { 4 | private int age; 5 | private String name; 6 | 7 | public Person(int age, String name) { 8 | this.age = age; 9 | this.name = name; 10 | } 11 | public int getAge() { 12 | return age; 13 | } 14 | public String getName() { 15 | return name; 16 | } 17 | 18 | public static int compaireByAge(Person p1, Person p2) { 19 | return new Integer(p1.getAge()).compareTo(p2.age); 20 | } 21 | 22 | @Override 23 | public String toString() { 24 | return this.name + "(" + this.age + ")"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseOfForEachMethod.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.sumit.learn.model.Person; 7 | 8 | public class UseOfForEachMethod { 9 | 10 | public static void main(String[] args) { 11 | List list = new ArrayList(); 12 | list.add(new Person(37, "Bob")); 13 | list.add(new Person(67, "Mike")); 14 | list.add(new Person(27, "Robin")); 15 | 16 | //forEach take Consumer which has one method called accept , it is a functional interface 17 | list.forEach(p -> System.out.println(p)); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseParallelStream.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.sumit.learn.model.Person; 7 | 8 | public class UseParallelStream { 9 | 10 | public static void main(String[] args) { 11 | List list = new ArrayList(); 12 | list.add(new Person(37, "Bob")); 13 | list.add(new Person(67, "Mike")); 14 | list.add(new Person(27, "Robin")); 15 | 16 | list 17 | .parallelStream() 18 | .forEach(p -> { 19 | System.out.println(Thread.currentThread().getName()); 20 | System.out.println(p); 21 | }); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/CountItem.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.sumit.learn.model.Person; 7 | 8 | public class CountItem { 9 | 10 | public static void main(String[] args) { 11 | List list = new ArrayList(); 12 | list.add(new Person(37, "Bob")); 13 | list.add(new Person(67, "Mike")); 14 | list.add(new Person(27, "Robin")); 15 | 16 | //Use of parallel stream cause performance issue , due split 17 | long count = list 18 | .stream() 19 | .count(); 20 | 21 | System.out.println("Count is " + count); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseStringJoinMethod.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class UseStringJoinMethod { 7 | 8 | public static void main(String[] args) { 9 | 10 | //Add comma between list 11 | String str = String.join(",","David", "Narayn", "Vithan", "Namaya"); 12 | System.out.println(str); 13 | 14 | //Second version 15 | List list = new ArrayList<>(); 16 | list.add("David"); 17 | list.add("Narayn"); 18 | list.add("Vithan"); 19 | list.add("Namaya"); 20 | 21 | //Takes collection 22 | str = String.join(",", list); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseStaticMethodReference.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | import com.sumit.learn.model.Person; 8 | 9 | public class UseStaticMethodReference { 10 | 11 | public static void main(String[] args) { 12 | List list = new ArrayList(); 13 | list.add(new Person(37, "Bob")); 14 | list.add(new Person(67, "Mike")); 15 | list.add(new Person(27, "Robin")); 16 | 17 | 18 | //Method Reference 19 | Collections.sort(list, Person :: compaireByAge); 20 | 21 | list.forEach(p -> System.out.println(p)); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseSequentialStream.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import com.sumit.learn.model.Person; 7 | 8 | public class UseSequentialStream { 9 | 10 | public static void main(String[] args) { 11 | List list = new ArrayList(); 12 | list.add(new Person(37, "Bob")); 13 | list.add(new Person(67, "Mike")); 14 | list.add(new Person(27, "Robin")); 15 | 16 | list.stream().forEach(p -> System.out.println(p)); 17 | 18 | //Filter 19 | list.stream() 20 | .filter(p ->p.getAge()>60) 21 | .forEach(p -> System.out.println(p)); 22 | } 23 | 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseOptional.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | import java.util.ArrayList; 3 | import java.util.List; 4 | import java.util.Optional; 5 | 6 | import com.sumit.learn.model.Person; 7 | 8 | public class UseOptional { 9 | static List vault = new ArrayList(); 10 | 11 | public static void main(String[] args) { 12 | vault.add(new Person(67, "Mike")); 13 | vault.add(new Person(37, "Bob")); 14 | vault.add(new Person(27, "Robin")); 15 | 16 | Optional optPerson = getPersonByName("Mike"); 17 | if(optPerson.isPresent()) { 18 | System.out.println(optPerson.get()); 19 | } 20 | } 21 | 22 | public static Optional getPersonByName(String name) { 23 | return Optional.of(new Person(23, "Sumit")); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseNashornExecuteJsFile.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.io.File; 4 | import java.io.FileReader; 5 | import java.io.IOException; 6 | import java.io.Reader; 7 | 8 | import javax.script.ScriptEngine; 9 | import javax.script.ScriptEngineManager; 10 | import javax.script.ScriptException; 11 | 12 | public class UseNashornExecuteJsFile { 13 | 14 | public static void main(String[] args) { 15 | ScriptEngineManager mgr = new ScriptEngineManager(); 16 | ScriptEngine engine = mgr.getEngineByName("nashorn"); 17 | try { 18 | File scriptFile = new File("script/script.js"); 19 | Reader reader = new FileReader(scriptFile); 20 | engine.eval(reader); 21 | } catch(IOException | ScriptException e) { 22 | e.printStackTrace(); 23 | } 24 | 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseIntanceAndDurationTimeApi.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.time.Duration; 4 | import java.time.Instant; 5 | /* 6 | * New java time API classes are immutable and 7 | * Cab be shared among thread 8 | * NO zero based api now 1 means Jan , in java zero means Jan 9 | */ 10 | public class UseIntanceAndDurationTimeApi { 11 | 12 | public static void main(String[] args) throws InterruptedException { 13 | 14 | Instant start = Instant.now(); 15 | System.out.println("Start time is " + start); 16 | 17 | Thread.sleep(1000); 18 | 19 | Instant end = Instant.now(); 20 | System.out.println("End time is " + end); 21 | 22 | Duration difference = Duration.between(start, end); 23 | System.out.println("Difference is " + difference.getSeconds() + " seconds"); 24 | 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UserInstanceMethodReference.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | import com.sumit.learn.model.Person; 8 | 9 | public class UserInstanceMethodReference { 10 | 11 | public static void main(String[] args) { 12 | 13 | List list = new ArrayList(); 14 | list.add(new Person(37, "Bob")); 15 | list.add(new Person(67, "Mike")); 16 | list.add(new Person(27, "Robin")); 17 | 18 | UserInstanceMethodReference object = new UserInstanceMethodReference(); 19 | 20 | //Method Reference instance 21 | Collections.sort(list, object :: compaireByAge); 22 | 23 | list.forEach(p -> System.out.println(p)); 24 | } 25 | 26 | public int compaireByAge(Person p1, Person p2) { 27 | return new Integer(p1.getAge()).compareTo(p2.getAge()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseZonedDateTime.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.time.Instant; 4 | import java.time.ZoneId; 5 | import java.time.ZonedDateTime; 6 | import java.time.format.DateTimeFormatter; 7 | import java.time.format.FormatStyle; 8 | 9 | /** 10 | * @author sumit 11 | * How to covert time between time zone ? 12 | */ 13 | public class UseZonedDateTime { 14 | 15 | public static void main(String[] args) { 16 | DateTimeFormatter df = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT); 17 | 18 | ZonedDateTime zonedDateTime = ZonedDateTime.now(); 19 | System.out.println(df.format(zonedDateTime)); 20 | 21 | ZonedDateTime dubaiZonedDateTime = ZonedDateTime.ofInstant(Instant.now(), ZoneId.of("Asia/Dubai")); 22 | System.out.println(df.format(dubaiZonedDateTime)); 23 | 24 | //Print all Zone Id 25 | ZoneId.getAvailableZoneIds().forEach(id -> System.out.println(id)); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/SumAndAgreegate.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.OptionalDouble; 6 | 7 | import com.sumit.learn.model.Person; 8 | 9 | public class SumAndAgreegate { 10 | 11 | public static void main(String[] args) { 12 | List list = new ArrayList(); 13 | list.add(new Person(37, "Bob")); 14 | list.add(new Person(67, "Mike")); 15 | list.add(new Person(27, "Robin")); 16 | 17 | int sum = list 18 | .stream() 19 | .mapToInt(p -> p.getAge()) 20 | .sum(); 21 | System.out.println("Sum of age is " + sum); 22 | 23 | OptionalDouble agg = list 24 | .stream() 25 | .mapToInt(p -> p.getAge()) 26 | .average(); 27 | if(agg.isPresent()) { 28 | //System.out.println(" Aggreegate is " + agg); 29 | System.out.println(" Aggreegate is " + agg.getAsDouble()); 30 | } else { 31 | System.out.println("Value is not defined"); 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseTimeFormatter.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | import java.time.LocalTime; 3 | import java.time.format.DateTimeFormatter; 4 | import java.time.format.DateTimeFormatterBuilder; 5 | import java.time.temporal.ChronoField; 6 | 7 | public class UseTimeFormatter { 8 | 9 | public static void main(String[] args) { 10 | LocalTime localTime = LocalTime.now(); 11 | 12 | //Default provide constant 13 | DateTimeFormatter tf = DateTimeFormatter.ISO_TIME; 14 | System.out.println(tf.format(localTime)); 15 | 16 | //Custom Formatter (1 Hour,2 Minutes , 3 Seconds) 17 | DateTimeFormatterBuilder tfb = new DateTimeFormatterBuilder() 18 | .appendValue(ChronoField.HOUR_OF_DAY) 19 | .appendLiteral(" Hours,") 20 | .appendValue(ChronoField.MINUTE_OF_HOUR) 21 | .appendLiteral(" Minutes,") 22 | .appendValue(ChronoField.SECOND_OF_MINUTE) 23 | .appendLiteral(" Seconds"); 24 | System.out.println(tfb.toFormatter().format(localTime)); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseNashorn.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import javax.script.ScriptEngine; 4 | import javax.script.ScriptEngineManager; 5 | import javax.script.ScriptException; 6 | 7 | /** 8 | * @author sumit 9 | * Nashorn javascript engine newly added in java 8 , before it there was Rhino engine 10 | * 11 | * How to open Nashorn console 12 | * Ans. jjs (command) 13 | * 14 | */ 15 | public class UseNashorn { 16 | 17 | public static void main(String[] args) { 18 | ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); 19 | ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn"); 20 | 21 | String script = "var welcome = 'Welcome javascript world';" 22 | + "welcome;"; 23 | try { 24 | String result = (String) scriptEngine.eval(script); 25 | System.out.println(result); 26 | } catch (ScriptException e) { 27 | System.out.println("There was an error while executing javascript."); 28 | e.printStackTrace(); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/DateAndTime.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.time.LocalDate; 4 | import java.time.LocalDateTime; 5 | import java.time.LocalTime; 6 | 7 | public class DateAndTime { 8 | 9 | public static void main(String[] args) { 10 | 11 | //Local Date 12 | LocalDate localeDate = LocalDate.now(); 13 | System.out.println(localeDate); 14 | 15 | //Local Specific Date 16 | LocalDate specificLocaleDate = LocalDate.of(2017, 07, 23); 17 | System.out.println(specificLocaleDate); 18 | 19 | //Local Time 20 | LocalTime localTime = LocalTime.now(); 21 | System.out.println(localTime); 22 | 23 | //Local specific time 24 | LocalTime specificLocalTime = LocalTime.of(17, 50, 50); 25 | System.out.println(specificLocalTime); 26 | 27 | //LocalDateTime 28 | LocalDateTime localDateTime = LocalDateTime.now(); 29 | System.out.println(localDateTime); 30 | 31 | //Specific Local Date time 32 | LocalDateTime specificLocalDateTime = LocalDateTime.of(specificLocaleDate, specificLocalTime); 33 | System.out.println(specificLocalDateTime); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseStringJoinerClass.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.StringJoiner; 6 | 7 | public class UseStringJoinerClass { 8 | 9 | public static void main(String[] args) { 10 | 11 | //String Joiner with delimiter, prefix, suffix and default value 12 | StringJoiner sj = new StringJoiner(",", "{", "}"); 13 | sj.setEmptyValue("No value yet"); 14 | System.out.println(sj); // print No value yet 15 | 16 | sj.add("David") 17 | .add("Narayan") 18 | .add("Hanuman"); 19 | 20 | System.out.println(sj);//{David,Narayan,Hanuman} 21 | 22 | //Merging StringJoiner 23 | StringJoiner sj2 = new StringJoiner(","); 24 | sj2.add("SUmit"); 25 | sj.merge(sj2); 26 | System.out.println(sj);//{David,Narayan,Hanuman,SUmit} 27 | 28 | List list = new ArrayList<>(); 29 | list.add("David"); 30 | list.add("Narayn"); 31 | list.add("Vithan"); 32 | list.add("Namaya"); 33 | 34 | //String joiner using collection 35 | StringJoiner sj3 = new StringJoiner(" and ", "{", "}"); 36 | list.forEach(name -> sj3.add(name)); 37 | System.out.println(sj3);//{David and Narayn and Vithan and Namaya} 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/com/sumit/learn/java8/UseDateFormatter.java: -------------------------------------------------------------------------------- 1 | package com.sumit.learn.java8; 2 | 3 | import java.time.LocalDate; 4 | import java.time.format.DateTimeFormatter; 5 | import java.time.format.DateTimeFormatterBuilder; 6 | import java.time.format.FormatStyle; 7 | import java.time.temporal.ChronoField; 8 | import java.util.Locale; 9 | 10 | public class UseDateFormatter { 11 | 12 | public static void main(String[] args) { 13 | 14 | LocalDate currDate = LocalDate.now(); 15 | System.out.println(currDate); 16 | 17 | //Default constant provided 18 | DateTimeFormatter df = DateTimeFormatter.ISO_DATE; 19 | System.out.println(df.format(currDate)); 20 | 21 | //Localize to french and style to Medium 22 | DateTimeFormatter fr_df = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(Locale.FRENCH); 23 | System.out.println(fr_df.format(currDate)); 24 | 25 | //Custom Date format 26 | DateTimeFormatterBuilder dfb = new DateTimeFormatterBuilder() 27 | .appendValue(ChronoField.YEAR) 28 | .appendLiteral(",") 29 | .appendValue(ChronoField.MONTH_OF_YEAR) 30 | .appendLiteral(",") 31 | .appendValue(ChronoField.DAY_OF_MONTH); 32 | DateTimeFormatter custom_df = dfb.toFormatter(); 33 | System.out.println(custom_df.format(currDate)); 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Java 8 2 | 3 | Introduction to new things in java 8. 4 | > Use link to see example of relevant title. 5 | 6 | ### What is lambda expression ? 7 | Lambda expression is nothing but an anonymous function. 8 | ### [Functional Interface](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseFunctionalInterface.java) 9 | Functional Interface is an Interface having only one abstract method. 10 | 11 | ### [Default static method](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseStaticDefaultMethod.java) 12 | Default static method method with default static and defined in an interface. 13 | ### [Built in Functional Interface](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/) 14 | ``` 15 | java.util.function.* 16 | java.util.function.Predicate 17 | java.util.function.Consumer 18 | ``` 19 | ### Method Reference 20 | #### [Static Method Reference](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseStaticMethodReference.java) 21 | list.forEach(p -> Person::getInfo) 22 | #### [Instance Method Reference](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UserInstanceMethodReference.java) 23 | list.forEach(p -> personObject::getInfo) 24 | 25 | #### [Optional](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseOptional.java) 26 | Way to deal with null value. 27 | java.util.Optional.of(new Person(23, "Sumit")) 28 | #### [Traveling Collection](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseOfForEachMethod.java) 29 | forEach(Consumer con) method added to collection 30 | ### Stream API 31 | #### [Sequential Stream](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseSequentialStream.java) 32 | Traveling and aggregating collection sequentially. 33 | new ArrayList(). stream() 34 | #### [Parallel Stream](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseParallelStream.ajav) 35 | Traveling and aggregating collection parallel. 36 | new ArrayList(). parallelStream() 37 | 38 | ### Time API 39 | ``` 40 | //The Classes 41 | java.util.Instance 42 | java.util.Duration 43 | java.util.LocalTime 44 | java.util.LocalDate 45 | java.util.LocalDateTime 46 | java.util.DateTimeFormatter 47 | java.util.DateTimeFormatterBuilder 48 | ``` 49 | #### [Local Date and Time](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/DateAndTime.java) 50 | Dealing with time and date without time zone information. 51 | #### [Date Formatter](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseDateFormatter.java) 52 | How for format date and time using DateTimeFormatter ? 53 | #### [Zoned Time](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseZonedDateTime.java) 54 | Date and Time with zone information. 55 | ### [Introduction to Nashorn, a replacement for Rhino](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseNashorn.java) 56 | ```java 57 | //nashorn command line using jjs 58 | Sumits-MacBook-Air:~ sumit$ jjs 59 | jjs> var welcome = 'Welcome to Nashorn'; 60 | jjs> welcome 61 | ``` 62 | ### [Execute Js file using nashorn](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseNashornExecuteJsFile.java) 63 | How execute javscript file using nashorn ? 64 | 65 | ### Improvements 66 | #### [String.join](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseStringJoinMethod.java) 67 | Adding delimiter between string. join() static method on string. 68 | #### [StringJoiner Class](https://github.com/sumitppawar/JavaEight/blob/master/src/com/sumit/learn/java8/UseStringJoinerClass.java) 69 | Joining using java.util.StringJoiner class. We can add delimiter, prefix, suffix 70 | #### [New Methods on Object class]() 71 | #### [Base64 class]() 72 | #### [New Method on collection]() 73 | 74 | --------------------------------------------------------------------------------