fork download
  1. import java.util.*;
  2. import java.util.function.Predicate;
  3. import java.util.stream.Stream;
  4. import java.lang.*;
  5.  
  6. class TestingJavaStream {
  7. public static void main(String[] args) {
  8. System.out.println(System.getProperty("java.version"));
  9.  
  10. Message message = new Message();
  11. message.setName("Hello World!");
  12.  
  13. Stream<Message> messageStream = streamNonnulls(Collections.singleton(message))
  14. .filter(not(Collection::isEmpty))
  15. .findFirst()
  16. .map(Collection::stream)
  17. .orElseGet(Stream::empty);
  18.  
  19. System.out.println("Number of messages printed are "
  20. + messageStream
  21. .map(TestingJavaStream::print)
  22. .count());
  23. }
  24.  
  25. public static class Message {
  26. private String name;
  27.  
  28. public String getName() {
  29. return this.name;
  30. }
  31.  
  32. public void setName(String name) {
  33. this.name = name;
  34. }
  35.  
  36. @Override
  37. public int hashCode() {
  38. final int prime = 31;
  39. int result = 1;
  40. result = prime * result + ((name == null) ? 0 : name.hashCode());
  41. return result;
  42. }
  43.  
  44. @Override
  45. public boolean equals(Object obj) {
  46. if (this == obj)
  47. return true;
  48. if (obj == null)
  49. return false;
  50. if (getClass() != obj.getClass())
  51. return false;
  52. Message other = (Message) obj;
  53. if (name == null) {
  54. if (other.name != null)
  55. return false;
  56. } else if (!name.equals(other.name))
  57. return false;
  58. return true;
  59. }
  60.  
  61. @Override
  62. public String toString() {
  63. return "Message [name=" + name + "]";
  64. }
  65.  
  66. }
  67.  
  68. @SafeVarargs
  69. public static <T> Stream<T> streamNonnulls(T... in) {
  70. return stream(in).filter(Objects::nonNull);
  71. }
  72.  
  73. @SafeVarargs
  74. public static <T> Stream<T> stream(T... in) {
  75. return Optional.ofNullable(in)
  76. .filter(arr -> !(arr.length == 1 && arr[0] == null))
  77. .map(Stream::of)
  78. .orElseGet(Stream::empty);
  79. }
  80.  
  81. public static <T> Predicate<T> not(Predicate<T> p) {
  82. return (T x) -> !p.test(x);
  83. }
  84.  
  85. public static Message print(Message someValue) {
  86. System.out.println("Message is :: " + someValue.toString());
  87. return someValue;
  88. }
  89. }
Success #stdin #stdout 0.14s 49252KB
stdin
Standard input is empty
stdout
12.0.1
Number of messages printed are 1