Tag: java 8

方法参考的组成

这与这个问题有关: 如何进行function组合? 我注意到方法引用可以分配给声明为Function的变量,因此我假设它应该具有andThen或compose函数,因此我希望我们可以直接组合它们。 但显然我们需要将它们分配给一个声明为Function first的变量(或者在调用之前进行类型转换),然后才能调用andThen或者在它们上进行compose 。 我怀疑我可能会对这应该如何运作有一些误解。 所以我的问题: 在我们调用andThen方法之前,为什么我们需要首先进行类型转换或将其分配给变量? 以这种方式需要完成的方法引用的类型究竟是什么? 示例代码如下。 public class MyMethods{ public static Integer triple(Integer a){return 3*a;} public static Integer quadruple(Integer a){return 4*a;} public int operate(int num, Function f){ return f.apply(num); } public static void main(String[] args){ MyMethods methods = new MyMethods(); int three = methods.operate(1, MyMethods::triple); // This is fine // […]

为什么此代码因sourceCompatibility = 1.8而失败

使用sourceCompatibility = 1.7或1.6编译时,以下代码有效,但切换到1.8后失败: public class Java8Wat { interface Parcelable { } static class Bundle implements Parcelable { public void put(Parcelable parcelable) { } public void put(Serializable serializable) { } public T getParcelable() { return null; } } static { Bundle inBundle = new Bundle(); Bundle outBundle = new Bundle(); outBundle.put(inBundle.getParcelable()); } } 编译输出: Java8Wat.java:23: error: […]

如何在夏令时内validation当地日期时间?

Mar 12, 2017 02:39:00 “America/Chicago”不存在。 当我将日期和时间设置为此值时,它不会失败。 时间设定为Mar 12, 2017 03:39:00一小时后。 如何通知此时间不存在。 这是时间如何向前跳跃 01:59:59 3:00:00 正如你所看到的, 02:39:00在这个日期永远不会存在。 这是我正在使用的代码 package com.company; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.ZonedDateTime; public class Main { public static void main(String[] args) { ZoneId zoneId = ZoneId.of(“America/Chicago”); ZonedDateTime dateTimeStart = ZonedDateTime.of(2017, 1, 1, 15, 39, 0, 0, ZoneId.of(“America/Chicago”)); ZonedDateTime dateTimeStartUtc = […]

Oracle Java ConcurrentHashMap的错误实现?

我在Oracle的Java 8实现上测试ConcurrentHashMap : ConcurrentMap concurrentMap = new ConcurrentHashMap(); String result = concurrentMap.computeIfAbsent(“A”, k -> “B”); System.out.println(result); // “B” result = concurrentMap.putIfAbsent(“AA”, “BB”); System.out.println(result); // null computeIfAbsent的Javadoc确实这么说 实施要求: 默认实现等效于此映射的以下步骤,然后返回当前值,如果现在不存在则返回null: if (map.get(key) == null) { V newValue = mappingFunction.apply(key); if (newValue != null) return map.putIfAbsent(key, newValue); } 它表示然后返回当前值,如果现在不存在则返回null 。 那么它不应该返回null吗? 鉴于putIfAbsent也返回null 。 我在这里想念的是什么?

必须partitioningBy生成一个包含true和false条目的地图?

partitioningBy收集器将谓词应用于流中的每个元素,并生成从布尔到满足或不满足谓词的流中元素列表的映射。 例如: Stream.of(1,2,3,4).collect(partitioningBy(x -> x >= 3)) // {false=[1, 2], true=[3, 4]} 正如分区的目的是什么所讨论的 , 观察到的行为是partitioningBy总是返回一个包含true和false条目的映射。 例如: Stream.empty().collect(partitioningBy(x -> false)); // {false=[], true=[]} Stream.of(1,2,3).collect(partitioningBy(x -> false)); // {false=[1, 2, 3], true=[]} Stream.of(1,2,3).collect(partitioningBy(x -> true)); // {false=[], true=[1, 2, 3]} 这种行为实际上是在某处指定的吗? Javadoc只说: 返回一个Collector,它根据Predicate对输入元素进行分区,并将它们组织成Map<Boolean, List> 。 返回的Map的类型,可变性,可序列化或线程安全性无法保证。 符合实现可以返回这些: Stream.empty().collect(partitioningBy(x -> false)); // {}, or {false=[]}, or {true=[]} Stream.of(1,2,3).collect(partitioningBy(x […]

在Java中使用Supplier有什么好处?

阅读有关新Supplier界面的信息,我看不出其使用的任何优势。 我们可以看到它的一个例子。 class Vehicle{ public void drive(){ System.out.println(“Driving vehicle …”); } } class Car extends Vehicle{ @Override public void drive(){ System.out.println(“Driving car…”); } } public class SupplierDemo { static void driveVehicle(Supplier supplier){ Vehicle vehicle = supplier.get(); vehicle.drive(); } } public static void main(String[] args) { //Using Lambda expression driveVehicle(()-> new Vehicle()); driveVehicle(()-> new Car()); } […]

使用Collectors.summingInt时如何获取自定义类型而不是Integer?

我目前正在创建一个Map<String, Map> ,其中Integer表示秒: Map<String, Map> map = stream.collect(Collectors.groupingBy( x -> x.getProject(), Collectors.groupingBy( x -> x.getDate(), Collectors.summingInt(t -> t.getDuration().toSecondOfDay()) ) )); 我怎样才能创建Map<String, Map> ?

如何使流管道更简单

我认为我的代码需要改进。 我在流的filter()和map()阶段使用对象allSummaryTSTLog ,所以我必须调用File.listFiles两次: public static List ParserPath(List allLogPath) { FilenameFilter filter = new MyFilter(“Summary_TSTLog”); return allLogPath.parallelStream().filter(path -> { File testPath = new File(path); if (!testPath.isDirectory()) { MyLog.log.info(“test path : [” + path + “] is not exist, continue”); return false; } File[] allSummaryTSTLog = testPath.listFiles(filter); if (allSummaryTSTLog == null || allSummaryTSTLog.length == 0) { MyLog.log.info(“test […]

Azure网站上的Tomcat 8

我可以看到Azure目前仅支持Java 7和Tomcat 7或Jetty 9.1。 至于系统的开发,客户正在考虑将Azure作为托管Java应用程序的选项。 该应用程序将使用Java 8编写。是否有人知道Microsoft是否有将Tomcat服务器更新为Tomcat 8的计划? 亚马逊去年11月已经有了这个,所以我认为微软不会等待太长时间。 有谁知道微软是否有任何“正式”升级计划,所以我不需要为网络应用购买整个VM? (或者使用Java 7)

Java Lambda表达式

我目前正在JDK 1.8上学习lambda表达式。 我遇到了一些我发现我不明白的代码。 这是代码: import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.lang.Comparable; /** * Hello world! * */ public class App { public static void main( String[] args ) throws Exception { List list = Arrays.asList(“a”, “b”, “c”); sort(list, Comparable::compareTo); } interface MyComparable { public <T extends Comparable> int compare(T obj1, T obj2 ); } […]