小编use*_*547的帖子

Java 8 - 在stream.map()中链接构造函数调用和setter

我上课了

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 lambda java-8 java-stream

32
推荐指数
4
解决办法
2万
查看次数

JDK dateformater在德语语言环境中解析DayOfWeek,java8 vs java9

我在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.

java java-8 java-time java-9

16
推荐指数
2
解决办法
639
查看次数

从 Kubernetes 入口删除路由路径

我在 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”。我如何做到这一点。

google-kubernetes-engine

16
推荐指数
2
解决办法
1万
查看次数

Java 14 记录和数组

鉴于以下代码:

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::equalsArrays::deepEqualsArray::toString)。

所以我猜 Java 14 Records ( JEP 359 ) 不能很好地处理数组,必须使用 IDE 生成相应的方法(至少在 IntelliJ 中,默认情况下会生成“有用”的方法,即它们使用静态方法在Arrays)。

或者还有其他解决方案吗?

java arrays java-14 java-record

15
推荐指数
3
解决办法
1015
查看次数

使用特定类名时 JShell 错误“意外类型”

我只是在玩 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 jshell

15
推荐指数
1
解决办法
193
查看次数

聚合Java中的对象列表

我们在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 aggregate-functions java-8 java-stream

13
推荐指数
2
解决办法
8298
查看次数

Spring Cloud/Boot vs Wildfly Swarm

我在网上做了一些现代容器少Java堆栈的分析,我发现的两个主要有希望的事情是:

  1. Spring Boot/Cloud(包装在Tomcat或Jetty中,......)
  2. Wildfly Swarm(Moduler Wildfly 9服务器,具有最少的可能组件)

是的,两者都有自己的功能,但我无法找到两者的良好比较,因为这两件事情在我看来比较好,但我还是要决定实施的好处,

  1. 适合开发者健康
  2. 复杂的企业逻辑
  3. 可扩展性
  4. 热部署
  5. 微服务方法
  6. 企业集成模式
  7. 持续交付管道.

谢谢你的想法

查希尔

java spring-boot microservices wildfly-9 wildfly-swarm

12
推荐指数
1
解决办法
6818
查看次数

带有sendAsyncMulti/multiResponseAsync的Java 9 HttpClient

我正在尝试使用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)

java java-9 java-http-client

12
推荐指数
1
解决办法
674
查看次数

使用Java 8合并两个映射

我有两张这样的地图:

map1 = new Map<String, MyObject>();
map2 = new Map<String, MyObject>();

MyObject {
   Integer mark1;
   Integer mark2;
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是将两个地图合并成map3 <String, MyObject>如下:

  1. 如果map1.place不在map2.place,那么我将条目添加到map3.
  2. 同样如果map2.place不在map1.place,我添加条目map3.
  3. 如果map1.placemap2.place,那么我添加此条目:
    • map1.place, (map1.mark1, map2.mark2)

我已经读过了flatMap,但我真的很难用它.有任何线索如何做到这一点?
谢谢!!

java java-stream

11
推荐指数
2
解决办法
2万
查看次数

为什么getClass返回类的名称+ $ 1(或$*)

我正在写一段代码,如果它是某个类的实例,我必须转换它.

像往常一样,我用它instanceof来检查兼容性.

问题是从不满足检查,因为对象属于"奇怪"类.

例如; 当我getClass().getSimpleName()在这个对象上调用方法时,它会返回类的名称+ $*(例如,ViewPart$1而不是ViewPart).

$*意味着什么?有解决方案或解决方法吗?

java instanceof

8
推荐指数
1
解决办法
4983
查看次数