Advertisement
Guest User

Untitled

a guest
Feb 12th, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.26 KB | None | 0 0
  1. package com.golonzovsky.streams;
  2.  
  3. import lombok.AllArgsConstructor;
  4. import lombok.Data;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7.  
  8. import java.io.BufferedReader;
  9. import java.io.FileReader;
  10. import java.time.Year;
  11. import java.util.*;
  12. import java.util.function.BinaryOperator;
  13. import java.util.stream.Collectors;
  14. import java.util.stream.IntStream;
  15. import java.util.stream.Stream;
  16.  
  17. public class StreamsTest {
  18.  
  19.  
  20. private List<Book> library;
  21.  
  22. @Before
  23. public void setUp() throws Exception {
  24. Book nails = new Book("Fundamentsls of nail image", Arrays.asList("Li", "Fu", "Li"), new int[]{256}, Year.of(2014), 25.2, Topic.MEDICINE);
  25. Book dragon = new Book("Compilers: Principles, Techniques and Tools", Arrays.asList("Aho", "Lam", "Li"), new int[]{1009}, Year.of(2006), 23.6, Topic.COMPUTING);
  26. Book voss = new Book("Voss", Arrays.asList("Patrick white"), new int[]{478}, Year.of(1957), 29.8, Topic.FICTION);
  27. Book lotr = new Book("Lord Of The Rings", Arrays.asList("Tolkien"), new int[]{531, 416, 624}, Year.of(1955), 23.0, Topic.FICTION);
  28. Book history = new Book("Ancient History", Arrays.asList("Likonov", "Sokolsky"), new int[]{578}, Year.of(1979), 28.0, Topic.HISTORY);
  29.  
  30. library = Arrays.asList(nails, dragon, voss, lotr, history);
  31. }
  32.  
  33.  
  34. @Test
  35. public void testStreams() throws Exception {
  36. Stream<Book> computingBooks = library.stream()
  37. .filter(b -> b.getTopic() == Topic.COMPUTING);
  38.  
  39. Stream<String> bookTitles = library.stream()
  40. .map(Book::getTitle);
  41.  
  42. Stream<Book> booksSortedByTitle = library.stream()
  43. .sorted(Comparator.comparing(Book::getTitle));
  44.  
  45. //distinct authors in order of book titles
  46. Stream<String> authors = library.stream()
  47. .sorted(Comparator.comparing(Book::getTitle))
  48. .flatMap(b -> b.getAuthors().stream())
  49. .distinct();
  50.  
  51. Stream<Book> first100inAlphabetical = library.stream().sorted(Comparator.comparing(Book::getTitle))
  52. .limit(100);
  53. Stream<Book> rest100inAlphabetical = library.stream().sorted(Comparator.comparing(Book::getTitle))
  54. .skip(100);
  55.  
  56. Optional<Book> firstPublished = library.stream()
  57. .sorted(Comparator.comparing(Book::getYear))
  58. .findFirst();
  59.  
  60. int totalAuthors = library.stream().mapToInt(b -> b.getAuthors().size()).sum();
  61.  
  62. int totalPageCount1 = library.stream().flatMapToInt(b -> Arrays.stream(b.getPageCount())).sum();
  63. int totalPageCount2 = library.stream().flatMapToInt(b -> IntStream.of(b.getPageCount())).sum();
  64.  
  65. List<Book> multipleAuthoredHistories = library.stream()
  66. .filter(b -> b.getTopic() == Topic.HISTORY)
  67. .peek(b -> System.out.println(b.getTitle()))
  68. .filter(b -> b.getAuthors().size() > 1)
  69. .collect(Collectors.toList());
  70.  
  71. Stream<String> sortedTitles = library.stream().map(Book::getTitle).sorted();
  72.  
  73. Stream<Book> sortedByAuthorCount = library.stream()
  74. .sorted(Comparator.comparing(Book::getAuthors, Comparator.comparing(List::size)));
  75. }
  76.  
  77. @Test
  78. public void testOptionalsAndMatchers() throws Exception {
  79. // allMatch noneMatch anyMatch
  80. boolean withinHeight = library.stream().filter(b -> b.getTopic() == Topic.HISTORY)
  81. .mapToDouble(Book::getHeight).allMatch(i -> i < 19);
  82.  
  83. // findAny findFirst
  84. Optional<Book> anyBook = library.stream().filter(b -> b.getAuthors().contains("Herman Melville")).findAny();
  85.  
  86. BufferedReader br = new BufferedReader(new FileReader("mastering.txt"));
  87. Optional<String> line = br.lines().filter(s -> s.contains("findFirst")).findFirst();
  88.  
  89. // optional
  90. String maybe = Optional.of("something").orElse("nothing");
  91. String maybe2 = Optional.<String>empty().orElseGet(() -> "nothing");
  92. }
  93.  
  94. @Test
  95. public void testBasicReduction() throws Exception {
  96. // statistics
  97. IntSummaryStatistics intSummaryStatistics = IntStream.rangeClosed(1, 10).summaryStatistics();
  98. intSummaryStatistics.getMax();
  99. intSummaryStatistics.getMin();
  100.  
  101. IntSummaryStatistics pageCountStatistics = library.stream()
  102. .mapToInt(b -> IntStream.of(b.getPageCount()).sum())
  103. .summaryStatistics();
  104.  
  105. // object reduction
  106.  
  107. Optional<Book> oldestBook = library.stream().min(Comparator.comparing(Book::getTopic));
  108. Optional<String> firstAlphabeticalTitle = library.stream().map(Book::getTitle).min(Comparator.naturalOrder());
  109. // Comparator.reverseOrder()
  110.  
  111. // collectors
  112. Set<String> titles = library.stream()
  113. .map(Book::getTitle)
  114. .collect(Collectors.toSet());
  115.  
  116. Map<String, Year> titleToPubDate = library.stream().collect(Collectors.toMap(Book::getTitle, Book::getYear)); // IllegalStateException on duplicate
  117.  
  118. }
  119.  
  120. @Test
  121. public void testCollectors() throws Exception {
  122.  
  123. Map<Topic, List<Book>> booksByTopic = library.stream()
  124. .collect(Collectors.groupingBy(Book::getTopic));
  125.  
  126.  
  127. Map<String, Year> titleByLastPubDate = library.stream()
  128. .collect(Collectors.toMap(Book::getTitle, Book::getYear, (x, y) -> x.isAfter(y) ? x : y));
  129.  
  130. Map<String, Year> titleToLastPubDateSorted = library.stream()
  131. .collect(Collectors.toMap(Book::getTitle,
  132. Book::getYear,
  133. BinaryOperator.maxBy(Comparator.naturalOrder()),
  134. TreeMap::new));
  135.  
  136. Map<Boolean, List<Book>> fictionNonFiction = library.stream()
  137. .collect(Collectors.partitioningBy(b -> b.getTopic() == Topic.FICTION));
  138.  
  139. Map<Topic, Optional<Book>> bookWithMostAuthorsForEachTopic = library.stream()
  140. .collect(Collectors.groupingBy(Book::getTopic,
  141. Collectors.maxBy(Comparator.comparing(b -> b.getAuthors().size()))));
  142.  
  143. Map<Topic, Integer> volumeCountByTopic = library.stream()
  144. .collect(Collectors.groupingBy(Book::getTopic, Collectors.summingInt(b -> b.getPageCount().length)));
  145.  
  146. Optional<Topic> mostPopularTopic = library.stream()
  147. .collect(Collectors.groupingBy(Book::getTopic, Collectors.counting()))
  148. .entrySet().stream()
  149. .max(Map.Entry.comparingByValue()) //.max(Comparator.comparing(Map.Entry::getValue))
  150. .map(Map.Entry::getKey);
  151.  
  152. Map<Topic, String> concatTitlesByTopic = library.stream()
  153. .collect(Collectors.groupingBy(Book::getTopic, Collectors.mapping(Book::getTitle, Collectors.joining(","))));
  154.  
  155. String concatTitles = library.stream().map(Book::getTitle).collect(Collectors.joining(", "));
  156.  
  157. List<String> authorsForBooks = library.stream()
  158. .map(b -> b.getAuthors().stream().collect(Collectors.joining(", ", "'" + b.getTitle() + "': ", "")))//'Compilers: Principles, Techniques and Tools': Aho, Lam, Li
  159. .collect(Collectors.toList());
  160. }
  161.  
  162.  
  163. }
  164.  
  165.  
  166. @Data
  167. @AllArgsConstructor
  168. class Book {
  169. private String title;
  170. private List<String> authors;
  171. private int[] pageCount;
  172. private Year year;
  173. private double height;
  174. private Topic topic;
  175. }
  176.  
  177. enum Topic {HISTORY, COMPUTING, FICTION, MEDICINE}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement