Tag: java 8

使用java 8从年龄列表中的id列表

我是java的新手。我想获得列表中给出的具有特定年龄的员工的id列表。 我实际上想要使用java 8function来做到这一点,但我无法理解如何使用map和collect函数来获得所需的输出。 预期产量如下: 例如- 20-1,5 40-2 30-3 50-4 我还想要,如果我们可以使用ids列表制作自定义类。我的真实场景基于自定义对象。我在基于列表中的唯一值检索某些值。 代码如下 public class Emp { int id; int age; public Emp(int id, int age) { this.id = id; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } […]

使用一组固定类型对类进行参数化

假设我有一个generics类Foo ,它可以容纳T类型的对象。 此外,假设我只希望能够使用两种类型之一的对象来实例化类。 最后,假设这两个类型的最低公共上限是一个类型,它比我想要允许的那两个类型有更多的子类,所以我不能简单地为类型参数指定一个上限(如同在class Foo ),因为那时我将允许用除我期望的两种类型之外的其他类型来实例化该类。 为了说明,假设我希望Foo 只保留String或Integer 。 最低公共上限是Object ,因此指定上限不会起作用。 当然,我可以做一些事情 class Foo { private T obj; public Foo(T obj) throws IllegalArgumentException { if (!(obj instanceof String || obj instanceof Integer)) { throw new IllegalArgumentException(“…”); } this.obj = obj; } } 但是,在这种情况下,我仍然可以使用任何对象调用构造函数; 如果我尝试使用既不是String也不是Integer来实例化它,我将在运行时获得exception。 我想做得更好。 我希望编译器静态地(即,在编译时 )推断我只能使用String或Integer对象来实例化该类。 我正在思考这些方面可能会做的事情: class Foo { private T obj; public […]

Java方法引用具有generics参数的方法

我正在尝试对一个方法进行方法引用,该方法具有在类声明中指定的generics参数。 所以我有: public interface IExecutable { void execute(P parameter); } public class Parameter implements IParameter { public void childSpecific() { … } } public class TestClass { … //somewhere in the code public void foo(Parameter parameter) { parameter.childSpecific(); } public void test() { IExecutable executable = this::foo; //compilation error // The type TestClass does not […]

Play 2.5升级错误:CompletionException – 此处没有可用的HTTP上下文

在示例应用程序上从Play 2.4升级到Play 2.5后,当我运行./activator clean dist ,我没有遇到任何错误,但是在转到特定端点http://localhost:9000/java/proxy ,我收到了以下错误: [error] application – ! @72keog237 – Internal server error, for (GET) [/java/proxy] -> play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[CompletionException: java.lang.RuntimeException: There is no HTTP Context available from here.]] at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:293) at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220) at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188) at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:100) at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100) at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99) at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344) at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) Caused by: java.util.concurrent.CompletionException: […]

Java 8中接口和抽象类之间的根本区别

考虑到接口现在可以为它提供的方法提供实现,我无法正确理解接口和抽象类之间的差异。 有谁知道如何正确解释差异? 我还被告知,与抽象类相比,接口稍微更轻,性能明智。 有人可以证实吗?

Stacktrace与类名中的数字 – 为什么?

当finalizeOperation运行时(在更大的应用程序中生产): public interface OperationFinalizerHook { void onOperationFinalize(Operation operation, Object context); } private final List operationFinalizeHooks = new ArrayList(); … public void finalizeOperation(Object context) { final Operation operation = getOperation(); operationFinalizeHooks.forEach(hook -> hook.onOperationFinalize(operation, context)); } 跟随调用树/堆栈跟踪构建: 11 at com.company.SomeClass.lambda$finalizeOperation$0 (SomeClass.java:51) 12 at com.company.SomeClass$$Lambda$135/2085968933.accept (Unknown source) 13 at java.util.ArrayList.forEach (ArrayList.java:1249) 14 at com.company.SomeClass.finalizeOperation (SomeClass.java:51) 我对第12行感兴趣 – 这个名字来自哪里? […]

使用java stream过滤谓词时记录filter的结果

场景是我创建了不同类型的filter,它们根据对象的属性过滤一些对象的列表。 因此,我创建了一个由每个filterinheritance的AbstractObjectFilter类。 AbstractObjectFilter.java public abstract class AbstractEventFilter { protected abstract Predicate isEligible(); public List getFilteredEvents(final List events) { return events.stream().filter(isEligible()).collect(Collectors.toList()); } } 所以现在每个filter都扩展了这个类并覆盖了isEligible(),并且在该函数中它根据其属性返回谓词。 例如: – MinNumOfPrizesFilter.java public class MinimumNumOfPrizesFilter extends AbstractEventFilter { private int minimumNumOfPrizes; public MinimumNumOfPrizesFilter(@NonNull int minimumNumOfPrizes) { this.minimumNumOfPrizes = minimumNumOfPrizes; } @Override protected Predicate isEligible() { return event -> event.getPrizeCount() >= minimumNumOfPrizes; […]

TLS扩展“服务器名称指示”(SNI):服务器端不可用的值

基于JSSE示例,我试图在服务器端获取TLS参数“服务器名称指示”(SNI)的值 – 但没有成功。 我确信该值是由客户端发送的,因为我使用了显示该值的网络嗅探器(Wireshark)。 但是,当我使用以下代码片段时,服务器名称参数列表为空(显示“协议”): public void connectionAccepted(Socket socket) { System.out.println(“Connection accepted!”); try { /* get SNI parameter */ SSLSocket sslSocket = (SSLSocket)socket; SSLParameters sslParams = sslSocket.getSSLParameters(); List serverNames = sslParams.getServerNames(); for(SNIServerName item : serverNames){ System.out.println(“SNI: ” + item.toString()); } String[] protocols = sslParams.getProtocols(); for(String item : protocols) { System.out.println(“Protocols: ” + item.toString()); } } […]

方法参考中的类型推断

我最近把手放在Java 8上并尝试使用方法参考。 我正在尝试不同类型的方法引用,并陷入“引用特定类型的任意对象的实例方法”类型中。 String[] arr = {“First”, “Second”, “Third”, “Fourth”}; Arrays.sort(arr, String::compareToIgnoreCase); 这非常有效。 但是当我尝试通过其类型引用用户定义类的方法时: Demo2[] arr = {a, b}; Arrays.sort(arr, Demo2::compare); 这将编译时错误显示为“无法从静态上下文引用非静态方法”。 这是Demo2类: public class Demo2 implements Comparator { Integer i; Demo2(Integer i1){ i = i1; } public Integer getI() { return i; } @Override public int compare(Demo2 o1, Demo2 o2) { return o1.getI().compareTo(o2.getI()); } […]

java 8选项列表收集列表编译错误

我无法理解之间的区别 Stream<Optional> optionalStream = Stream.of( Optional.of(1), Optional.empty(), Optional.of(5)); List<Optional> optionalList = optionalStream.collect(Collectors.toList()); 哪个工作得很好,并且: List<Optional> optionalList1 = Stream.of( Optional.of(1), Optional.empty(), Optional.of(5)).collect(Collectors.toList()); 我收到错误的地方 Error:(138, 40) java: incompatible types: inference variable T has incompatible bounds equality constraints: java.util.Optional lower bounds: java.util.Optional