peek

java8 -函数式编程之Stream

孤街醉人 提交于 2019-11-27 04:37:54
在 java8 -函数式编程之Lambda表达式 、 java8 -函数式编程之四个基本接口 、 java8 -函数式编程之Optional 三篇文章中,我们已经对函数式编程有了充分的了解,接下来,我们将会运用之前学到的知识学习项目中常用到的 java8 Stream 流式操作。 什么是Stream Stream API 借助于 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。 流主要有三部分构成:获取一个数据源(source)→ 数据转换 → 执行操作获取想要的结果。每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道。 Stream的特点 无存储性: 流不是存储元素的数据结构;相反,它需要从数据结构,数组,生成器函数或IO管道中获取数据并通过流水线地(计算)操作对这些数据进行转换。 函数式编程: Stream上操作会产生一个新结果,而不会去修改原始数据

Stream.peek() method in Java 8 vs Java 9

和自甴很熟 提交于 2019-11-27 04:16:04
问题 I am in the progress of learning through Java 8 lambda expressions and would like to ask about the following piece of Java code relating to the peek method in the function interface that I have come across. On execution of the program on IDE, it gives no output. I was expecting it would give 2, 4, 6 . import java.util.Arrays; import java.util.List; public class Test_Q3 { public Test_Q3() { } public static void main(String[] args) { List<Integer> values = Arrays.asList(1, 2, 3); values.stream(

Is there any way to peek at the stdin buffer?

谁说我不能喝 提交于 2019-11-27 01:57:49
We know that stdin is, by default, a buffered input; the proof of that is in usage of any of the mechanisms that "leave data" on stdin , such as scanf() : int main() { char c[10] = {'\0'}; scanf("%9s", c); printf("%s, and left is: %d\n", c, getchar()); return 0; } ./a.out hello hello, and left is 10 10 being newline of course... I've always been curious, is there any way to "peek" at the stdin buffer without removing whatever may reside there? EDIT A better example might be: scanf("%9[^.]", c); With an input of "at.ct", now I have "data" ( ct\n ) left on stdin , not just a newline. Portably,

java简单实现中缀转后缀

坚强是说给别人听的谎言 提交于 2019-11-27 01:36:20
缺点:目前只实现10以内的四则运算 学到的知识点: StringBuffer如果想转char数组,首先转String,然后装Char String tem1=st.toString(); char tem[]=tem1.toCharArray(); 如何将字符转数字Float要使用包装类型 Float.valueOf(tem[i]-'0') import java.nio.CharBuffer; import java.util.Stack; public class ZhongZhui { static Stack<Character> stack = new Stack(); public static void main(String[] args) { String s="5+2*(3*(2-1))"; StringBuilder out1=getLast(s); float result= calsum(out1); System.out.println(result); } public static float getSum(char op,float n1,float n2){ if(op=='+') return n1+n2; if(op=='-') return n2-n1; if(op=='*') return n1*n2; if(op=='/')

JDK1.8 之Stream API总结

99封情书 提交于 2019-11-27 01:01:28
Stream是 Java 8新增加的类,用来补充集合类。 Stream代表数据流,流中的数据元素的数量可能是有限的,也 可能是无限 的。 Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的数据的访问和有效管理(增删改),而Stream并 没有提供访问和管理元素的方式 ,而是通过声明数据源的方式,利用可计算的操作在数据源上执行,当然BaseStream.iterator() 和 BaseStream.spliterator()操作提供了遍历元素的方法。 Java Stream提供了提供了 串行和并行两种类型的流 ,保持一致的接口,提供函数式编程方式,以管道方式提供中间操作和最终执行操作,为Java语言的集合提供了现代语言提供的类似的高阶函数操作,简化和提高了Java集合的功能。 本文首先介绍Java Stream的特点,然后按照功能分类逐个介绍流的中间操作和终点操作,最后会介绍第三方为Java Stream做的扩展。 介绍 Stream接口还包含几个基本类型的子接口如IntStream, LongStream 和 DoubleStream。 关于流和其它集合具体的区别,可以参照下面的列表: 不存储数据。流是基于数据源的对象,它本身不存储数据元素,而是通过管道将数据源的元素传递给操作。 函数式编程。流的操作不会修改数据源,例如filter不会将数据源中的数据删除。

How to look ahead one element (peek) in a Python generator?

本秂侑毒 提交于 2019-11-26 18:52:43
I can't figure out how to look ahead one element in a Python generator. As soon as I look it's gone. Here is what I mean: gen = iter([1,2,3]) next_value = gen.next() # okay, I looked forward and see that next_value = 1 # but now: list(gen) # is [2, 3] -- the first value is gone! Here is a more real example: gen = element_generator() if gen.next_value() == 'STOP': quit_application() else: process(gen.next()) Can anyone help me write a generator that you can look one element forward? The Python generator API is one way: You can't push back elements you've read. But you can create a new iterator

Oracle 绑定变量窥视

那年仲夏 提交于 2019-11-26 15:56:06
绑定变量窥视功能是数据库的一个特性,自ORACLE9i版本开始引入,默认是开启的。 “绑定变量窥视”表示,查询优化器在第一次调用游标时,会观察用户定义的绑定变量的值,允许优化器来确认过滤条件的选择性,以及是否使用绑定变量代替了常量。之后调用游标时不会出现窥视,且会根据指针共享标准来共享游标,即使随后的调用使用不同的绑定值。 使用绑定变量窥视,第一次解析包含绑定谓词的SQL语句时,优化器将查看绑定变量的值,并使用该值为查询创建执行计划。然后,不管更改的绑定值如何,该计划都将被存储并用于未来的所有执行。如果初始绑定值不能很好地代表将来执行查询时提供的其他值,那么,即使当前访问路径较优,也可能导致未来执行变差,甚至影响某些迭代的查询性能变慢。 上面的特性是由参数"_optim_peek_user_binds"驱动的,如果禁用这个数据库特性,已经执行过的这类值的执行计划将不会发生变化,但还有一个可能性,一个新值能创造一个更优的执行计划。 本次技术分享,就是,绑定变量窥视参数"_optim_peek_user_binds"对SQL执行计划的影响。在不同的场景下,合理设置"_optim_peek_user_binds"参数,具有重大的实践意义。之前,美创某客户核心系统,就出现过由于"_optim_peek_user_binds"参数设置而引发该核心系统SQL执行出现性能问题。 接下来

Java 8 Stream Api 中的 peek 操作

落爺英雄遲暮 提交于 2019-11-26 15:14:04
1. 前言 我在 Java 8 Stream API中的 map 和flatMap 中讲述了 Java8 Stream API 中 map 操作和 flatMap 操作的区别。然后有小伙伴告诉我 peek 操作 也能实现元素的处理。但是你知道 map 和 peek 的区别吗? map 我们在开头文章已经讲过了,你可以去详细了解一下它,本文将重点讲解一下 peek 操作。 2. peek peek 操作接收的是一个 Consumer<T> 函数。顾名思义 peek 操作会按照 Consumer<T> 函数提供的逻辑去消费流中的每一个元素,同时有可能改变元素内部的一些属性。 这里我们要提一下这个 Consumer<T> 以理解 什么是消费。 2.1 什么是消费 (Consumer) package java.util.function; import java.util.Objects; @FunctionalInterface public interface Consumer<T> { void accept(T t); // 嵌套accept , 顺序为先执行 accept 后执行参数里的 after.accpet default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull

Java 8 Stream Api 中的 peek 操作

不问归期 提交于 2019-11-26 15:13:36
1. 前言 我在 Java 8 Stream API中的 map 和flatMap 中讲述了 Java8 Stream API 中 map 操作和 flatMap 操作的区别。然后有小伙伴告诉我 peek 操作 也能实现元素的处理。但是你知道 map 和 peek 的区别吗? map 我们在开头文章已经讲过了,你可以去详细了解一下它,本文将重点讲解一下 peek 操作。 2. peek peek 操作接收的是一个 Consumer<T> 函数。顾名思义 peek 操作会按照 Consumer<T> 函数提供的逻辑去消费流中的每一个元素,同时有可能改变元素内部的一些属性。 这里我们要提一下这个 Consumer<T> 以理解 什么是消费。 2.1 什么是消费 (Consumer) package java.util.function; import java.util.Objects; @FunctionalInterface public interface Consumer<T> { void accept(T t); // 嵌套accept , 顺序为先执行 accept 后执行参数里的 after.accpet default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull

C equivalent to fstream&#39;s peek

你说的曾经没有我的故事 提交于 2019-11-26 11:26:01
问题 I know in C++, you\'re able to peek at the next character by using: in.peek(); . How would I go about this when trying to \"peek\" at the next character of a file in C? 回答1: fgetc+ungetc. Maybe something like this: int fpeek(FILE *stream) { int c; c = fgetc(stream); ungetc(c, stream); return c; } 回答2: You could use a getc followed by an ungetc 回答3: you'll need to implement it yourself. use fread to read the next character and fseek to go back to where you were before the read EDIT : int