package com.javatechie.stream; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; public class BiFunctionExample implements BiFunction, List, List> { @Override public List apply(List list1, List list2) { return Stream.of(list1, list2) .flatMap(List::stream) .distinct() .collect(Collectors.toList()); } public static void main(String[] args) { BiFunction biFunction = new BiFunctionExample(); List list1 = Stream.of(1, 3, 4, 6, 7, 9, 19).collect(Collectors.toList()); List list2 = Stream.of(11, 3, 43, 6, 7, 19).collect(Collectors.toList()); System.out.println("Traditional approach : " + biFunction.apply(list1, list2)); BiFunction,List,List> biFunction1=new BiFunction, List, List>() { @Override public List apply(List l1, List l2) { return Stream.of(l1, l2) .flatMap(List::stream) .distinct() .collect(Collectors.toList()); } }; System.out.println("annonymous impl : "+biFunction1.apply(list1, list2)); BiFunction,List,List> biFunction2=( l1, l2) ->{ return Stream.of(l1, l2) .flatMap(List::stream) .distinct() .collect(Collectors.toList()); }; Function,List> sortedFunction=(lists)->lists .stream() .sorted() .collect(Collectors.toList()); System.out.println("Lambda approach : "+biFunction2.andThen(sortedFunction).apply(list1, list2)); Map map=new HashMap<>(); map.put("basant",5000); map.put("santosh",15000); map.put("javed",12000); BiFunction increaseSalaryBiFunction= new BiFunction() { @Override public Integer apply(String key, Integer value) { return value+1000; } }; //map.replaceAll(increaseSalaryBiFunction); //BiFunction increaseSalBiFunction= ( key, value) -> value+2000; map.replaceAll(( key, value) -> value+2500); System.out.println(map); } }