Flink uses a lot of generics programming, which is an executor Framework with cluster of executor having a lot of thread for task by RPC communication(Actor System).

The data and the process of data are defined by user.

Event-Driven == Callback function registry : ListenableFuture,   SettableFuture, CompletableFuture 

  1. public SplitStream<T> split(OutputSelector<T> outputSelector) {
  2. return new SplitStream<>(this, clean(outputSelector));
  3. }
  4.  
  5. public <R> ConnectedStreams<T, R> connect(DataStream<R> dataStream) {
  6. return new ConnectedStreams<>(environment, this, dataStream);
  7. }
  8.  
  9. public <K> KeyedStream<T, K> keyBy(KeySelector<T, K> key) {
  10. Preconditions.checkNotNull(key);
  11. return new KeyedStream<>(this, clean(key));
  12. }
  13.  
  14. public <K> KeyedStream<T, K> keyBy(KeySelector<T, K> key, TypeInformation<K> keyType) {
  15. Preconditions.checkNotNull(key);
  16. Preconditions.checkNotNull(keyType);
  17. return new KeyedStream<>(this, clean(key), keyType);
  18. }
  19.  
  20. public KeyedStream<T, Tuple> keyBy(String... fields) {
  21. return keyBy(new Keys.ExpressionKeys<>(fields, getType()));
  22. }
  23.  
  24. private KeyedStream<T, Tuple> keyBy(Keys<T> keys) {
  25. return new KeyedStream<>(this, clean(KeySelectorUtil.getSelectorForKeys(keys,
  26. getType(), getExecutionConfig())));
  27. }
  28.  
  29. public DataStream<T> shuffle() {
  30. return setConnectionType(new ShufflePartitioner<T>());
  31. }
  32.  
  33. public DataStream<T> forward() {
  34. return setConnectionType(new ForwardPartitioner<T>());
  35. }
  36.  
  37. public <R> SingleOutputStreamOperator<R> map(MapFunction<T, R> mapper) {
  38.  
  39. TypeInformation<R> outType = TypeExtractor.getMapReturnTypes(clean(mapper), getType(),
  40. Utils.getCallLocationName(), true);
  41.  
  42. return transform("Map", outType, new StreamMap<>(clean(mapper)));
  43. }
  44.  
  45. public <R> SingleOutputStreamOperator<R> flatMap(FlatMapFunction<T, R> flatMapper) {
  46.  
  47. TypeInformation<R> outType = TypeExtractor.getFlatMapReturnTypes(clean(flatMapper),
  48. getType(), Utils.getCallLocationName(), true);
  49.  
  50. return transform("Flat Map", outType, new StreamFlatMap<>(clean(flatMapper)));
  51.  
  52. }
  53. public SingleOutputStreamOperator<T> filter(FilterFunction<T> filter) {
  54. return transform("Filter", getType(), new StreamFilter<>(clean(filter)));
  55.  
  56. }

  

Same as Template Programming in C++. Refer to  Boost

  1. class image;
  2.  
  3. class animation
  4. {
  5. public:
  6. void advance(int ms);
  7. bool inactive() const;
  8. void render(image & target) const;
  9. };
  10.  
  11. std::vector<animation> anims;
  12.  
  13. template<class C, class P> void erase_if(C & c, P pred)
  14. {
  15. c.erase(std::remove_if(c.begin(), c.end(), pred), c.end());
  16. }
  17.  
  18. void update(int ms)
  19. {
  20. std::for_each(anims.begin(), anims.end(), boost::bind(&animation::advance, _1, ms));
  21. erase_if(anims, boost::mem_fn(&animation::inactive));
  22. }
  23.  
  24. void render(image & target)
  25. {
  26. std::for_each(anims.begin(), anims.end(), boost::bind(&animation::render, _1, boost::ref(target)));
  27. }
  1. template<class R>
  2. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) () BOOST_BIND_NOEXCEPT, _bi::list0>
  3. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) () BOOST_BIND_NOEXCEPT)
  4. {
  5. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) () BOOST_BIND_NOEXCEPT;
  6. typedef _bi::list0 list_type;
  7. return _bi::bind_t<R, F, list_type> (f, list_type());
  8. }
  9.  
  10. template<class R, class B1, class A1>
  11. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1) BOOST_BIND_NOEXCEPT, typename _bi::list_av_1<A1>::type>
  12. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1) BOOST_BIND_NOEXCEPT, A1 a1)
  13. {
  14. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1) BOOST_BIND_NOEXCEPT;
  15. typedef typename _bi::list_av_1<A1>::type list_type;
  16. return _bi::bind_t<R, F, list_type> (f, list_type(a1));
  17. }
  18.  
  19. template<class R, class B1, class B2, class A1, class A2>
  20. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2) BOOST_BIND_NOEXCEPT, typename _bi::list_av_2<A1, A2>::type>
  21. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2)
  22. {
  23. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2) BOOST_BIND_NOEXCEPT;
  24. typedef typename _bi::list_av_2<A1, A2>::type list_type;
  25. return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
  26. }
  27.  
  28. template<class R,
  29. class B1, class B2, class B3,
  30. class A1, class A2, class A3>
  31. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3) BOOST_BIND_NOEXCEPT, typename _bi::list_av_3<A1, A2, A3>::type>
  32. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3)
  33. {
  34. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3) BOOST_BIND_NOEXCEPT;
  35. typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
  36. return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
  37. }
  38.  
  39. template<class R,
  40. class B1, class B2, class B3, class B4,
  41. class A1, class A2, class A3, class A4>
  42. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, typename _bi::list_av_4<A1, A2, A3, A4>::type>
  43. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4)
  44. {
  45. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT;
  46. typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
  47. return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
  48. }
  49.  
  50. template<class R,
  51. class B1, class B2, class B3, class B4, class B5,
  52. class A1, class A2, class A3, class A4, class A5>
  53. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
  54. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
  55. {
  56. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT;
  57. typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
  58. return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
  59. }
  60.  
  61. template<class R,
  62. class B1, class B2, class B3, class B4, class B5, class B6,
  63. class A1, class A2, class A3, class A4, class A5, class A6>
  64. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
  65. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
  66. {
  67. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT;
  68. typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
  69. return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
  70. }
  71.  
  72. template<class R,
  73. class B1, class B2, class B3, class B4, class B5, class B6, class B7,
  74. class A1, class A2, class A3, class A4, class A5, class A6, class A7>
  75. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
  76. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
  77. {
  78. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT;
  79. typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
  80. return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
  81. }
  82.  
  83. template<class R,
  84. class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
  85. class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
  86. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
  87. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
  88. {
  89. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT;
  90. typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
  91. return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
  92. }
  93.  
  94. template<class R,
  95. class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class B9,
  96. class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
  97. _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
  98. BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
  99. {
  100. typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT;
  101. typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
  102. return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
  103. }

  

  

https://www.boost.org/

Flink -- Java Generics Programming的更多相关文章

  1. thinking in java Generics Latent typing

    The beginning of this chapter introduced the idea of writing code that can be applied as generally a ...

  2. Thinking in java——Generics

    ​Ordinary classes and methods work with specific types: either primitives or class types. If you are ...

  3. Flink Java Demo(Windows)

    关于Flink相关的概念性东西就不说了,网上都有,官网也很详尽.本文主要记录一下Java使用Flink的简单例子. 首先,去官网下载Flink的zip包(链接就不提供了,你已经是个成熟的程序员了,该有 ...

  4. Flink DataStream API Programming Guide

    Example Program The following program is a complete, working example of streaming window word count ...

  5. Flink DataSet API Programming Guide

     https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/programming_guide.html   Example ...

  6. Java 8 实战 P3 Effective Java 8 programming

    目录 Chapter 8. Refactoring, testing, and debugging Chapter 9. Default methods Chapter 10. Using Optio ...

  7. Java Generics and Collections-2.4-2.5

    2.4 The Get and Put Principle Get and Put Principle: 用于取对象的泛型集合,声明为 <? extends T> 用于存对象的泛型集合,声 ...

  8. Java Generics and Collections-2.3

    2.3 Wildcards with super 这里就直接拿书上的例子好了,这是Collections里面的一个方法: public static <T> void copy(List& ...

  9. Java Generics and Collections-2.2

    2.2 Wildcards with extends 前面介绍过List<Integer>不是List<Number>的子类,即前者不能替换后者, java使用? extend ...

随机推荐

  1. AVFoundation 文本播报

    #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> @interface Speak ...

  2. AJAX中success函数的执行顺序

    1,问题,在上图中,数据传输正常,但是一直输出为空的p,再输出66, 2,原因,默认开启了异步加载, 3,解决方法,开启同步,或者在success中添加函数.

  3. php 替换 oracle 数据字段中“看不见”换行符号

    工作需要,把oracle中的数据导出csv,导出代码如下:<?php$file_name = "申請書承認(予定休出).csv";header("Content-D ...

  4. [PowerShell]Quote in String

    今天遇到一个问题,如何在Select-String的Pattern参数里能使用双引号 比如 Select-String -path . -pattern "Lines: <span c ...

  5. vim多行注释与删除

    一.多行注释 1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;2. 在行首使用上下键选择需要注释的多行;3. 按下键盘(大写)“I”键,进入插入模式:4. 然后输入注 ...

  6. flask总结02

    一:flask的响应: flask默认支持2种响应方式: 数据响应: 默认响应html文本,也可以返回 JSON格式 页面响应: 重定向 url_for 响应的时候,flask也支持自定义http响应 ...

  7. C++_友元2-友元成员函数

    接着上一篇<友元是什么>中,我们发现Remote友元类的大多数方法都是用Tv类的公有接口实现.这意味着这些方法并不是真正需要友元. 事实上唯一直接访问Tv成员的Remote方法是Remot ...

  8. LOJ6519. 魔力环(莫比乌斯反演+生成函数)

    题目链接 https://loj.ac/problem/6519 题解 这里给出的解法基于莫比乌斯反演.可以用群论计数的相关方法代替莫比乌斯反演,但两种方法的核心部分是一样的. 环计数的常见套路就是将 ...

  9. Poj:1064 : :Cable master (假定一个解并判断是否可行)(二分搜索答案)

    Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The J ...

  10. web 导出数据到 exls 中

    // 文件下载:导出excel表 @RequestMapping(value = "/exportExcel", method = {RequestMethod.GET}) @Re ...