我上课了
class Foo{
String name;
// setter, getter
}
Run Code Online (Sandbox Code Playgroud)
它只有一个默认的构造函数.
然后,我试图Foo从一些字符串创建一个List :
Arrays.stream(fooString.split(","))
.map(name -> {
Foo x = new Foo();
x.setName(name);
return x;
}).collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
由于没有构造函数采用名称,我不能简单地使用方法引用.当然,我可以使用构造函数调用和setter将这三行提取到一个方法中,但有没有更好或简洁的方法呢?(不更改Foo,这是生成的文件)
我在Java 8(1.8.0_77)和Java 9(Java HotSpot(TM)64位服务器VM(构建9 + 181,混合模式)中尝试了一些代码)
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
DayOfWeek mo = dtf.parse("Mo", DayOfWeek::from);
System.out.println("mo = " + mo);
Run Code Online (Sandbox Code Playgroud)
我不太熟悉这些类的细节,但在Java 8中这个工作,打印:
mo =星期一
在Java 9中,它失败了
线程"main"中的异常java.time.format.DateTimeParseException:无法在java.base上的java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1988)的索引0处解析文本"Mo"在day.main(day.java:10)的/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)
任何想法,这是可重现的吗?
因此,在格式化时:使用此代码:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
String format = dtf.format(DayOfWeek.MONDAY);
System.out.println("format = " + format);
Run Code Online (Sandbox Code Playgroud)
jdk1.8.0-77:
格式= Mo.
jdk-9(build 9 + 181)
格式= Mo.
我在 kubernetes 中部署了名为“test”的服务。服务名称:测试端口:80
有一个名为“/abc”的端点
入口.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: load-balancer
spec:
rules:
- http:
paths:
- path: /test/*
backend:
serviceName: test
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
API 调用“ http://ip-address/test/abc ”给出 404 错误。但是端点“/test/abc”工作正常。
路由时我需要跳过“/test”。我如何做到这一点。
鉴于以下代码:
public static void main(String[] args) {
record Foo(int[] ints){}
var ints = new int[]{1, 2};
var foo = new Foo(ints);
System.out.println(foo); // Foo[ints=[I@6433a2]
System.out.println(new Foo(new int[]{1,2}).equals(new Foo(new int[]{1,2}))); // false
System.out.println(new Foo(ints).equals(new Foo(ints))); //true
System.out.println(foo.equals(foo)); // true
}
Run Code Online (Sandbox Code Playgroud)
显然,似乎使用了数组的toString,equals方法(而不是静态方法、Arrays::equals、Arrays::deepEquals 或Array::toString)。
所以我猜 Java 14 Records ( JEP 359 ) 不能很好地处理数组,必须使用 IDE 生成相应的方法(至少在 IntelliJ 中,默认情况下会生成“有用”的方法,即它们使用静态方法在Arrays)。
或者还有其他解决方案吗?
我只是在玩 JShell,似乎定义class Z{}然后定义
var z = new Z()不起作用。但是使用不同的类名,比如class Xand class A,确实有效。
当然我一定遗漏了一些明显的东西......?
| Welcome to JShell -- Version 14.0.1
| For an introduction type: /help intro
jshell> class X{}
| created class X
jshell> class Z{}
| created class Z
jshell> var x = new X()
x ==> X@26a1ab54
| created variable x : X
jshell> var z = new Z()
| Error:
| unexpected type
| required: class
| found: type parameter Z …Run Code Online (Sandbox Code Playgroud) 我们在Java中有任何聚合器函数来执行以下聚合吗?
Person {
String name;
String subject;
String department;
Long mark1;
Long mark2;
Long mark3;
}
Run Code Online (Sandbox Code Playgroud)
列表包含如下数据.
Name |Subject |Department |Mark1 |Mark2 |Mark3 --------|-----------|-----------|-------|-------|----- Clark |English |DEP1 |7 |8 |6 Michel |English |DEP1 |6 |4 |7 Dave |Maths |DEP2 |3 |5 |6 Mario |Maths |DEP1 |9 |7 |8
聚合标准是Subject&Dep.结果对象需要
Subject |Department |Mark1 |Mark2 |Mark3 ----------- |-----------|-------|-------|----- English |DEP1 |13 |12 |13 Maths |DEP2 |3 |5 |6 Maths |DEP1 |9 |7 |8
可以通过手动迭代列表并创建聚合列表来实现此聚合.示例如下.
private static List<Person> getGrouped(List<Person> origList) {
Map<String, Person> …Run Code Online (Sandbox Code Playgroud) 我在网上做了一些现代容器少Java堆栈的分析,我发现的两个主要有希望的事情是:
是的,两者都有自己的功能,但我无法找到两者的良好比较,因为这两件事情在我看来比较好,但我还是要决定实施的好处,
谢谢你的想法
查希尔
我正在尝试使用Java 9 HttpClient.
HttpRequest的javadoc中的基本示例可以正常工作:
HttpResponse response = HttpRequest.create(new URI("http://stackoverflow.com/"))
.version(java.net.http.HttpClient.Version.HTTP_2)
.followRedirects(HttpClient.Redirect.ALWAYS)
.GET()
.response();
int statusCode = response.statusCode();
String responseBody = response.body(HttpResponse.asString());
System.out.println("statusCode = " + statusCode);
System.out.println("responseBody = " + responseBody);
Run Code Online (Sandbox Code Playgroud)
但是,在尝试使用时sendAsyncMulti,它不起作用.没有创建文件E:\foo,未达到printlnafter join,也没有异常,虽然我基本上是从HttpResponse.multiFileJavadoc复制了这个例子.我希望一些HTTP响应将保存在该目录中.我还试图删除HTTP2和followRedirects,谷歌等其他URL,但它没有改变任何东西.我究竟做错了什么?
CompletableFuture<Map<URI,Path>> cf =
HttpRequest.create(new URI("http://stackoverflow.com/"))
.version(java.net.http.HttpClient.Version.HTTP_2)
.followRedirects(HttpClient.Redirect.ALWAYS)
.GET()
.multiResponseAsync(HttpResponse.multiFile(Paths.get("E:\\foo")));
Map<URI,Path> results = cf.join();
System.out.println("after join");
Run Code Online (Sandbox Code Playgroud)
如果它是相关的,这是我使用的版本(JDK 9的最新版本):
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+126)
Java HotSpot(TM) Server VM (build 9-ea+126, mixed mode)
Run Code Online (Sandbox Code Playgroud) 我有两张这样的地图:
map1 = new Map<String, MyObject>();
map2 = new Map<String, MyObject>();
MyObject {
Integer mark1;
Integer mark2;
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是将两个地图合并成map3 <String, MyObject>如下:
map1.place不在map2.place,那么我将条目添加到map3.map2.place不在map1.place,我添加条目map3.map1.place是map2.place,那么我添加此条目:
map1.place, (map1.mark1, map2.mark2)我已经读过了flatMap,但我真的很难用它.有任何线索如何做到这一点?
谢谢!!
我正在写一段代码,如果它是某个类的实例,我必须转换它.
像往常一样,我用它instanceof来检查兼容性.
问题是从不满足检查,因为对象属于"奇怪"类.
例如; 当我getClass().getSimpleName()在这个对象上调用方法时,它会返回类的名称+ $*(例如,ViewPart$1而不是ViewPart).
这$*意味着什么?有解决方案或解决方法吗?
java ×9
java-8 ×3
java-stream ×3
java-9 ×2
arrays ×1
instanceof ×1
java-14 ×1
java-record ×1
java-time ×1
jshell ×1
lambda ×1
spring-boot ×1
wildfly-9 ×1