Skip to content

Commit 88a68eb

Browse files
committed
more lambda's and streams
1 parent 79bae89 commit 88a68eb

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed

otherstuff.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,9 @@ import java.io.File;
365365
import java.io.FileFilter;
366366
import java.util.Arrays;
367367
import java.util.List;
368+
import java.util.Optional;
368369
import java.util.function.Consumer;
370+
import java.util.function.Function;
369371
import java.util.function.Predicate;
370372
371373
import org.junit.Test;
@@ -544,6 +546,12 @@ public class LambdaExpressionTest {
544546
});
545547
}
546548
549+
@Test
550+
public void testCreationOfReusableFunction() {
551+
final Function<Integer, Predicate<Student>> marksGreaterThan = minimumMarks -> student -> student
552+
.getMarks() > minimumMarks;
553+
}
554+
547555
@Test
548556
public void testPrintStudentsWithMarksGreaterThanWithCustomCheckAndLambda() {
549557
course.printStudentsSatisfyingCheck((Student student) -> student.getMarks() > 70 && student.getMarks() <= 90);
@@ -568,6 +576,14 @@ public class LambdaExpressionTest {
568576
.forEach(student -> System.out.println(student));
569577
}
570578
579+
@Test
580+
public void testPreviousFunctionWithStreams_findFirst() {
581+
// Optional class is useful whenever the result may be absent.
582+
Optional<Student> first = course.getStudents().stream()
583+
.filter(student -> student.getMarks() > 70 && student.getMarks() <= 90).findFirst();
584+
System.out.println(first.get());
585+
}
586+
571587
@Test
572588
public void compareStudentsUsingLambdas() {
573589
// Behavior parameterization
@@ -578,3 +594,189 @@ public class LambdaExpressionTest {
578594
}
579595
580596
```
597+
598+
StreamsTest
599+
```
600+
601+
import static org.junit.Assert.assertEquals;
602+
603+
import java.util.ArrayList;
604+
import java.util.Arrays;
605+
import java.util.Comparator;
606+
import java.util.List;
607+
import java.util.Map;
608+
import java.util.stream.Collectors;
609+
import java.util.stream.Stream;
610+
611+
import org.junit.Test;
612+
613+
public class StreamsTest {
614+
615+
@Test
616+
public void streamsBasics_creatingAStream() {
617+
List<String> list = Stream.of("Apple", "Banana", "Mango").collect(Collectors.toList());
618+
assertEquals(Arrays.asList("Apple", "Banana", "Mango"), list);
619+
}
620+
621+
@Test
622+
public void streamsBasics_mappingAValueToAnother() {
623+
List<String> collected = Stream.of("Apple", "Banana", "Mango").map(value -> value.toUpperCase())
624+
.collect(Collectors.toList());
625+
626+
assertEquals(Arrays.asList("APPLE", "BANANA", "MANGO"), collected);
627+
}
628+
629+
@Test
630+
public void streamsBasics_filtering() {
631+
List<String> initCaps = Stream.of("Apple", "Banana", "mango")
632+
.filter(value -> Character.isUpperCase(value.charAt(0))).collect(Collectors.toList());
633+
634+
assertEquals(Arrays.asList("Apple", "Banana"), initCaps);
635+
}
636+
637+
class Country {
638+
private String name;
639+
private long area;
640+
private long population;
641+
private String continent;
642+
643+
public Country(String name, long area, long population, String continent) {
644+
super();
645+
this.name = name;
646+
this.area = area;
647+
this.population = population;
648+
this.continent = continent;
649+
}
650+
651+
public String getName() {
652+
return name;
653+
}
654+
655+
public long getArea() {
656+
return area;
657+
}
658+
659+
public long getPopulation() {
660+
return population;
661+
}
662+
663+
public String getContinent() {
664+
return continent;
665+
}
666+
667+
@Override
668+
public String toString() {
669+
return "Country [name=" + name + ", area=" + area + ", population=" + population + ", continent="
670+
+ continent + "]";
671+
}
672+
673+
}
674+
675+
List<Country> countries = Arrays.asList(new Country("India", 10000, 20000, "Asia"),
676+
new Country("China", 30000, 30000, "Asia"), new Country("USA", 40000, 10000, "North America"));
677+
678+
@Test
679+
public void streamsBasics_min() {
680+
Country smallestCountryInTheList = countries.stream().min(Comparator.comparing((Country c) -> c.getArea()))
681+
.get();
682+
assertEquals("India", smallestCountryInTheList.getName());
683+
}
684+
685+
@Test
686+
public void streamsBasics_max() {
687+
Country largestCountryInTheList = countries.stream().max(Comparator.comparing((Country c) -> c.getArea()))
688+
.get();
689+
assertEquals("USA", largestCountryInTheList.getName());
690+
}
691+
692+
@Test
693+
public void streamsBasics_reduce() {
694+
int count = Stream.of(100, 200, 300).reduce(0, (acc, element) -> acc + element);
695+
assertEquals(600, count);
696+
}
697+
698+
@Test
699+
public void streamsBasics_namesOfCountriesWithAreaGreaterThan20000() {
700+
List<String> countriesWithAreaGreaterThan20000 = countries.stream()
701+
.filter((Country country) -> country.getArea() > 20000).map(c -> c.getName())
702+
.collect(Collectors.toList());
703+
assertEquals(Arrays.asList("China", "USA"), countriesWithAreaGreaterThan20000);
704+
}
705+
706+
@Test
707+
public void streamsBasics_namesOfCountriesWithAreaGreaterThan20000_methodReferences() {
708+
List<String> countriesWithAreaGreaterThan20000 = countries.stream()
709+
.filter((Country country) -> country.getArea() > 20000).map(Country::getName)
710+
.collect(Collectors.toList());
711+
assertEquals(Arrays.asList("China", "USA"), countriesWithAreaGreaterThan20000);
712+
}
713+
714+
@Test
715+
public void streamsBasics_max_methodReferences() {
716+
Country largestCountryInTheList = countries.stream().max(Comparator.comparing(Country::getArea)).get();
717+
assertEquals("USA", largestCountryInTheList.getName());
718+
}
719+
720+
@Test
721+
public void streamsBasics_group() {
722+
Map<String, List<Country>> countriesGroupedByContinent = countries.stream()
723+
.collect(Collectors.groupingBy(country -> country.getContinent()));
724+
System.out.println(countriesGroupedByContinent.get("Asia"));
725+
}
726+
727+
@Test
728+
public void streamsBasics_groupAndCount() {
729+
Map<String, Long> countOfCountriesInContinent = countries.stream()
730+
.collect(Collectors.groupingBy(country -> country.getContinent(), Collectors.counting()));
731+
assertEquals(2, countOfCountriesInContinent.get("Asia").longValue());
732+
}
733+
734+
@Test
735+
public void streamsBasics_partition() {
736+
Map<Boolean, List<Country>> partitionBasedOnContinentAsiaOrNot = countries.stream()
737+
.collect(Collectors.partitioningBy(country -> country.getContinent().equals("Asia")));
738+
System.out.println(partitionBasedOnContinentAsiaOrNot.get(true));
739+
}
740+
741+
@Test
742+
public void streamsBasics_joinAsString() {
743+
Map<Boolean, List<Country>> partitionBasedOnContinentAsiaOrNot = countries.stream()
744+
.collect(Collectors.partitioningBy(country -> country.getContinent().equals("Asia")));
745+
746+
List<Country> countriesInAsia = partitionBasedOnContinentAsiaOrNot.get(true);
747+
String joinedByComma = countriesInAsia.stream().map(Country::getName)
748+
.collect(Collectors.joining(",", "[", "]"));
749+
assertEquals("[India,China]", joinedByComma);
750+
}
751+
752+
List<Integer> values = new ArrayList<>();
753+
754+
{
755+
for (int i = 1; i < 10000000; i++) {
756+
values.add(i);
757+
}
758+
}
759+
760+
@Test
761+
public void streamsBasics_performance_parallelStream() {
762+
int sum = values.parallelStream().mapToInt(i -> i).sum();
763+
System.out.println(sum);
764+
}
765+
766+
@Test
767+
public void streamsBasics_performance_stream() {
768+
int sum = values.stream().mapToInt(i -> i).sum();
769+
System.out.println(sum);
770+
}
771+
772+
@Test
773+
public void streamsBasics_performance_loop() {
774+
int sum = 0;
775+
for (int value : values)
776+
sum += value;
777+
System.out.println(sum);
778+
}
779+
}
780+
781+
```
782+

0 commit comments

Comments
 (0)