Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
21 views

Advanced Java Java8 Features

Uploaded by

Priya Solapure
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views

Advanced Java Java8 Features

Uploaded by

Priya Solapure
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

Java 8 features

==========================================================

1)Java Functional Interface

- it is an interface that contains only one abstract method


that means it have only one function to execuate
-lambda expression ( -> ) is expressed as instance of functional interface.
- functional inteface can have any number of default(non abstarct) and static
method.
-Functional Interface is also known as Single abstarct method(SAM).
-@FunctionalInterface is annotation used to define your interface as functional
interface

Functional Interface provided by java :


1)Runnable
2)Comparable
3)ActionListener
4)callable

===================================================================================
==

@FunctionalInterface
public interface ArithematicInterface {

int calculateOperation(int a, int b);

public static void sayHi() {


System.out.println("Hi");
}

public static void sayHiiii() {


System.out.println("Hi");
}

default void sayHello() {

}
}

=================================================================================

public class FunctionalInterfaceExample{

public static void main(String[] args) {

ArithematicInterface add = (a, b) -> {


return a + b;
};
System.out.println("Addition is :"+ add.calculateOperation(2, 3));

ArithematicInterface mult = (a ,b) -> a * b;


System.out.println("Multiplication is :"+ mult.calculateOperation(2,
3));
ArithematicInterface.sayHi();
add.sayHello();

}==================================================================================
==

-four main kinds of functional interface


1)consumer - takes only one argument and no retun value
2)predicate - takes only one argument and retuns value ->only true/false(boolean)
3)function
4)supplier

1)consumer

Functional Varients :-

1)DoubleConsumer

ex-> DoubleConsumer dc =(d) ->System.out.println(d+d);


dc.accept(4);

// creating instance of doubleConsumer


DoubleConsumer dcMul = (o)->System.out.println(o*o);
DoubleConsumer dcPlus =(d) ->System.out.println(d+d);

//uses andThen() method


DoubleConsumer combine = dcMul.andThen(dcPlus);
combine.accept(5);

2)IntConsumer
ex -> IntConsumer ic = (x) ->System.out.println(x*x);
ic.accept(4);

3)LongConsumer

LongConsumer lc =(l) ->System.out.println(l+l);


lc.accept(9);

4)Bi-Consumer - takes two argument, no return value

BiConsumer<String, Integer> biCon = (name, sal) ->


System.out.println(name+" "+sal);
biCon.accept("Akshay", 200000);

syntax-

Consumer<Integer> consumer = (value) -> System.out.printLn(value);

-The consumer interface is mainly used to print the data,logging,modify the data o
any operation that dosent produce a
result but affect the input data.
==============================================================================
2)Predicate
- function which accepts an arguments and in return generates a boolean value as an
answer.
- takes only one argument and retuns value ->only true/false(boolean)

Functional Varients:
a)IntPredicate
ex-->
IntPredicate ip = (age) -> age >= 18;
boolean perRes =ip.test(23);
System.out.println(perRes);

ex2 -->

IntPredicate ip1 = (age) -> {


if (age >= 18)
return true;
return false;
};

IntPredicate ip2 = (age) -> {


if (age >= 25)
return true;
return false;
};

IntPredicate ipOr = ip1.and(ip2);

boolean perRes = ipOr.test(23);


System.out.println(perRes);

b)DoublePredicate
c)LongPredicate
d) -Bi-predicate
which accepts 2 value as an argument and returns boolean value

Syntax:

public interface Predicate<T>


{
boolean test(T t);
}

Predicate predicate =(value) -> value != null;

-Predicate are commonly used for testing conditions, data filtering from
collections and making decision based on given criteria.
===================================================================================
====
3)Function

- it receives single argument and returns a value after some processing.

Functional Varients:
1)IntFunction<Integer>
ex-->
IntFunction<Integer> ip = (u) -> u*u;
Integer resFu =ip.apply(4);
System.out.println(resFu);

2)DoubleFunction<Double>
ex-->
DoubleFunction<Double> dcFun =(pp) -> pp/2;
Double po=dcFun.apply(6);
System.out.println(po);
3)LongFunction<Long>
4)BiFunction<T, U, R>
it accepts two arguments and returns a value after some processing.
==============================================================================

4)Supplier

-not take any single input or arguments and not returns anything
- we used supplier when there is need of lazy genration of value.

ex->
Supplier<Double> randomValue=() -> Math.random();
System.out.println(randomValue.get());

===============================================================================

============================************************===========================

===============================================================================

2) Optional

- it is a public final class which is used to deal with null pointer exception.
-it provides methods which actually checks the presence of value for perticular
variable.
- it avoids many null checks (ex-> if(str != null).

Optional have two states


1)Present - List<Employee> emp -> emp.get();
2)Absent

String str[] = new String[10];


str[3]="abc";
Optional<String> checkNull = Optional.ofNullable(str[3]);

if(checkNull.isPresent()) {
System.out.println("yes present");
}else {
System.out.println("not present");
}

=============
Example 2

//*********** Throw null pointer exception*****//


// String arr[] = new String[5];
// String aa = arr[2].toUpperCase();
// System.out.println(aa);

//**Handled by optional***//
String arr[] = new String[5];
Optional<String> optionalCheck = Optional.ofNullable(arr[2]);
if(optionalCheck.isPresent()) {
String aa = arr[2].toUpperCase();
System.out.println(aa);
}else {
System.out.println("Value not present");
}
=============================================================================
3)for each

List<String> nameList = new ArrayList<>();


nameList.add("Shubham");
nameList.add("Ajay");
nameList.add("Vaibhav");
nameList.add("Amruta");

nameList.forEach(i -> System.out.println(i));


nameList.forEach(System.out::println);

===================================================================================

4)Lambda expression

syntax ->

- It is short block of code which takes in parameters and returns a value.


- it is similar to method, but they do not need a name and they can be implemented
in body of the method.
- The lambda expression is provide the implementation of interface which has
functional interface.
- It saves the code
- lambda expression is treated as function so your javac(compiler) not
create .class file
- It helps to iterate, filter and extarct data from collections.

===================================================================================
===

5)Stram API
- Stram api is newly added feature to collections api in java 8.
-Stream api is represent the sequence of elements and supports different
operations(Filter,Sort,Map, Collect)
- Stram api takes input from your collections, arrays.
-stream api dont change the original data , they only provide the result
- to reduce lines of code

two types of operation:


1)Intermediate
-filter
-map
-sorted

2)Terminal
-collect
-forEach
-reduce

===================================================================================
==

public class Java8Feaures {

public static void main(String[] args) {

//map
List<Integer> numList =Arrays.asList(2,6,8,9);
List<Integer> sqrNum = numList.stream().map(x ->
x*x).collect(Collectors.toList());
System.out.println(sqrNum);

//filter
List<String> nameList = Arrays.asList("Shubham","Vaibhav","Ajay","Amruta");

List<String> resList =nameList.stream().filter(i ->


i.startsWith("A")).collect(Collectors.toList());
System.out.println(resList);

-----------------------------------------------------------------------------------
--------------
example-->

List<String> nameList =
Arrays.asList("Ajay","Mahesh","Ravi","Swapnesh","Sunil");

List<String> result =nameList.stream().filter(i ->


i.startsWith("S")).map(i-> i.concat(" OK"))
.collect(Collectors.toList());

for(String a :result) {
System.out.println(a);
}

Qustion to do--

//employee - empid, name, exp,salary,age


// filter emp on exp >=30 --> increase their current salary by
10000

-----------------------------------------------------------------------------------
--------------
//sorted
List<String>sortedList
=nameList.stream().sorted().collect(Collectors.toList());
System.out.println(sortedList);

Reverse Order

List<String> nameList =
Arrays.asList("Ajay","Mahesh","Ravi","Swapnesh","Sunil","Amit","Ishan");
List<String>sortedList
=nameList.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

for(String a :sortedList) {
System.out.println(a);
}

-----------------------------------------------------------------------------------
-------------

//forEach
numList.stream().map(x -> x+x).forEach(y -> System.out.println(y));

//reduce
List<Integer> numList = Arrays.asList(2, 6, 8, 9);
int res = numList.stream().filter(x -> x % 2 == 0).reduce(0, (a,b) -> a
+ b);
System.out.println(res);

===================================================================================
==================

-------------Example on pedicate and consumer -------------------------------

package com.wipro.oops;

import java.util.Arrays;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.DoubleConsumer;
import java.util.function.DoublePredicate;
import java.util.function.IntConsumer;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class FunctionInterfaceTypeExamples {

public static void main(String[] args) {

//Consumer
DoubleConsumer dc = (a) -> System.out.println(a*5);
dc.accept(2);

IntConsumer ic =(b)-> System.out.println(b+b);


ic.accept(5);

BiConsumer<String, Integer> biCon = (name,salary)->


System.out.println(name+":"+salary);
biCon.accept("Manish Jha", 45000);

System.out.println("===============Predicate==================");
DoublePredicate dp =(age) -> age > 18;
boolean res= dp.test(12);
System.out.println(res);
System.out.println("==================================================");

List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);

//consumer
Consumer<Integer> printData = (num) -> System.out.println(num > 5);
numbers.forEach(printData);

//prdicate
Predicate<Integer> isEven = (number) -> number % 2 == 0;
numbers.stream().filter(isEven)
.forEach(System.out::println);

System.out.println("========================Function======================");

IntFunction<Integer> cube = (a) -> a*a*a;


var res1 =cube.apply(5);
System.out.println("cube is :"+res1);

BiFunction<Integer, Integer, Integer> bifunDiv = (x,y) ->x/y;


var res4 =bifunDiv.apply(6, 2);
System.out.println(res4);

GenericInterface<String, String,String> greetings =(a,b) -> b+" -->"+a;


var greet =greetings.sayHi("Good Morning", "Pranay");
System.out.println(greet);

System.out.println("========================Supplier======================");

Supplier<Double> randomValue=() -> Math.random();


System.out.println(randomValue.get());

-------------------------------------------------------------------------------

@FunctionalInterface
public interface GenericInterface<T,U,R> {

public String sayHi(String greeting,String name);


}

==================================================

map
List<String> colorList = new ArrayList<>();
colorList.add("Pink");
colorList.add("Yellow");
colorList.add("Red");
colorList.add("Balck");
colorList.add("Grey");

List res =colorList.stream().map(i ->


i.length()).collect(Collectors.toList());

for(Object a : res) {
System.out.println(a);
}
-------------------------------------------

flat map

public static void main(String[] args) {

List<List<Integer>> number = new ArrayList<>();

List<Integer> list1 = Arrays.asList(1,2);


List<Integer> list2 = Arrays.asList(3,4);
List<Integer> list3 = Arrays.asList(5,6);
List<Integer> list4 = Arrays.asList(7,8);

number.add(list1);
number.add(list2);
number.add(list3);
number.add(list4);

System.out.println("List of List ----->"+number);

List<Integer> flatMapRes =number.stream().flatMap(i ->


i.stream()).collect(Collectors.toList());

System.out.println("After flat map operation-->"+flatMapRes);

//List<List<Integer>> number ==> List<Integer>


}

You might also like