Tag: java 8

流状态计算:累积总和

假设我有一个Java IntStream,是否可以将它转换为具有累积总和的IntStream? 例如,以[4,2,6,…]开头的流应转换为[4,6,12,…]。 更一般地说,应该如何实现有状态流操作? 感觉这应该是可能的: myIntStream.map(new Function { int sum = 0; Integer apply(Integer value){ return sum += value; } ); 有明显的限制,这只适用于顺序流。 但是,Stream.map明确需要无状态映射函数。 我是否正确错过了Stream.statefulMap或Stream.cumulative操作,还是缺少Java流的重点? 比较一下Haskell,其中scanl1函数正好解决了这个例子: scanl1 (+) [1 2 3 4] = [1 3 6 10]

EC2 Linux机器上安装的OpenJDK 8不支持ECDHE密码套件

在EC2 Amazon Linux机器上运行openjdk 1.8.0_51启动jetty-distribution-9.3.0.v20150612时,打印机不支持所有已配置的ECDHE套件。 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 not supported 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 not supported 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 not supported 2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher […]

java.lang.ClassCastException使用远程服务器上的spark作业中的lambda表达式

我正在尝试使用sparkjava.com框架为我的apache spark作业构建一个web api。 我的代码是: @Override public void init() { get(“/hello”, (req, res) -> { String sourcePath = “hdfs://spark:54310/input/*”; SparkConf conf = new SparkConf().setAppName(“LineCount”); conf.setJars(new String[] { “/home/sam/resin-4.0.42/webapps/test.war” }); File configFile = new File(“config.properties”); String sparkURI = “spark://hamrah:7077”; conf.setMaster(sparkURI); conf.set(“spark.driver.allowMultipleContexts”, “true”); JavaSparkContext sc = new JavaSparkContext(conf); @SuppressWarnings(“resource”) JavaRDD log = sc.textFile(sourcePath); JavaRDD lines = log.filter(x -> […]

在Java 8中反转比较器

我有一个ArrayList,并希望按降序排序。 我用它来java.util.stream.Stream.sorted(Comparator)方法。 这是根据Java API的描述: 返回由此流的元素组成的流,根据提供的Comparator进行排序。 这个方法按升序返回给我。 我应该更改哪个参数,只是为了降序?

Java 8 UTF-8编码问题(java bug?)

使用UTF-8编码创建String时存在不一致。 运行此代码: public static void encodingIssue() throws IOException { byte[] array = new byte[3]; array[0] = (byte) -19; array[1] = (byte) -69; array[2] = (byte) -100; String str = new String(array, “UTF-8”); for (char c : str.toCharArray()) { System.out.println((int) c); } } 在Java 1.8.0_20(及更早版本)上,我们得到了结果 65533 在Java 1.7和1.6上,我们得到了正确的结果: 57052 你遇到过这个错误吗? 这有解决方法吗? 这种不一致也体现在Shift_JIS,JIS_X0212-1990,x-IBM300,x-IBM834,x-IBM942,x-IBM942C,x-JIS0208上,但显然UTF-8更为紧迫。

使用Gson反序列化Java 8 LocalDateTime

我有一个日期时间属性的JSON,格式为“2014-03-10T18:46:40.000Z”,我想使用Gson将其反序列化为java.time.LocalDateTime字段。 当我尝试反序列化时,我收到错误: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING

在java8中,如何在lambdas foreach块中设置全局值?

public void test(){ String x; List list=Arrays.asList(“a”,”b”,”c”,”d”); list.forEach(n->{ if(n.equals(“d”)) x=”match the value”; }); } 1.像上面的代码一样,我想在foreach块旁边设置一个变量的值,它可以工作吗? 2.为什么? 3. foreach迭代器是有序的还是无序的? 4.我认为lamdas foreach块对于迭代器来说很酷且很简单,但这在java 7或之前的工作中确实是一件很复杂的事情。

在Stream reduce方法中,对于sum,标识总是0,对于乘法,1是1吗?

我进行java 8学习。 我发现了有趣的行为: 让我们看看代码示例: // identity value and accumulator and combiner Integer summaryAge = Person.getPersons().stream() //.parallel() //will return surprising result .reduce(1, (intermediateResult, p) -> intermediateResult + p.age, (ir1, ir2) -> ir1 + ir2); System.out.println(summaryAge); 和模型类: public class Person { String name; Integer age; ///… public static Collection getPersons() { List persons = new ArrayList(); persons.add(new […]

Java 8中流的笛卡尔积作为流(仅使用流)

我想创建一个方法来创建一个元素流,这些元素是多个给定流的笛卡尔积(由二元运算符聚合到同一类型)。 请注意,参数和结果都是流, 而不是集合。 例如,对于{A,B}和{X,Y}的两个流,我希望它产生值{AX,AY,BX,BY}的流 (简单串联用于聚合字符串)。 到目前为止,我已经提出了这个代码: private static Stream cartesian(BinaryOperator aggregator, Stream… streams) { Stream result = null; for (Stream stream : streams) { if (result == null) { result = stream; } else { result = result.flatMap(m -> stream.map(n -> aggregator.apply(m, n))); } } return result; } 这是我想要的用例: Stream result = cartesian( (a, b) […]

使用Java 8 Stream API查找枚举值

假设有一个名为Type的简单枚举,如下所示: enum Type{ X(“S1”), Y(“S2”); private String s; private Type(String s) { this.s = s; } } 使用for-loop的静态方法(假设该方法在enum中定义)可以轻松地找到给定s的正确枚举,例如: private static Type find(String val) { for (Type e : Type.values()) { if (esequals(val)) return e; } throw new IllegalStateException(String.format(“Unsupported type %s.”, val)); } 我认为用Stream API表示的function等价物将是这样的: private static Type find(String val) { return Arrays.stream(Type.values()) .filter(e -> esequals(val)) […]