小编Ant*_*arf的帖子

使用流处理异常

我有一个,Map<String,List<String>>并希望将其变成,Map<String,List<Long>>因为String列表中的每个代表一个Long

Map<String,List<String>> input = ...;
Map<String,List<Long>> output= 
input.entrySet()
       .stream()
       .collect(toMap(Entry::getKey, e -> e.getValue().stream()
                                                      .map(Long::valueOf)
                                                      .collect(toList()))
               );
Run Code Online (Sandbox Code Playgroud)

我主要的问题是每个人String可能不能正确代表一个Long; 可能有一些问题。Long::valueOf可能会引发例外。如果是这种情况,我想返回一个null或空Map<String,List<Long>>

因为我想遍历这张output地图。但是我不能接受任何错误转换。甚至没有一个。关于如何在不正确的String-> Long转换的情况下如何返回空输出的任何想法?

java java-8 java-stream

10
推荐指数
2
解决办法
187
查看次数

JAVA - Class类和*.class文件之间的区别?

*.class文件和Class类API之间有一些我不理解的东西.我来解释一下:

我有一个代表java类的文件A.java:

public class A { ... }

Class<?> clazz = A.class;
Run Code Online (Sandbox Code Playgroud)

当我编译A.java时,我得到一个A.class文件(字节代码).

A.class文件(字节码)和表示实例类(A.class)的clazz之间是否有任何关系?它们是一样的吗 ?

谢谢

java oop reflection jvm class

6
推荐指数
1
解决办法
184
查看次数

Java和@annotations

在使用Java注释时,我不太明白这一点.这是一个例子:

我创建一个@Log注释并添加一些功能(每个使用@Log注释的方法在执行方法之前运行一些日志).

现在我正在创建一个像这样的新@SuperLog注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Log
public @interface SuperLog {
     ............
}
Run Code Online (Sandbox Code Playgroud)

这个@SuperLog必须提供@Log所做的所有内容,以及一些特定于@SuperLog的额外内容.

不幸的是,当我执行一些使用@SuperLog注释的方法时,特定于@Log的日志不会执行.

我不明白为什么:@SuperLog用@Log注释的事实并不意味着它从@Log"继承"属性?不应该@SuperLog做@Log应该做的每一件事吗?

谢谢

java spring annotations java-ee

6
推荐指数
1
解决办法
132
查看次数

Java 语法 数组 {1,2,3} 与 new int[] {1,2,3}

我对数组语法有些不理解。例如我可以这样做:

int[] tab = {1,2,3};

假设我有一个接受数组作为参数的方法,我可以这样做: myMethod(tab);

但为什么我不能这样做: myMethod({1,2,3})

为什么我必须添加一个额外的“new int[]”,如下所示: Method(new int[] {1,2,3})

java arrays integer

5
推荐指数
1
解决办法
9070
查看次数

使用方法引用与 HashSet 重复

我想知道我List<T>是否有重复的元素。

我看过下面的方法:

public static <T> boolean areAllUnique(List<T> list){
    return list.stream().allMatch(new HashSet<>()::add);
}
Run Code Online (Sandbox Code Playgroud)

它有效,我很惊讶为什么?因为似乎每次都会创建一个新的 HashSet<> (所以基本上该方法应该总是返回 true 即使重复)

如果我以不同的方式编写上述方法,它将不再有效:

public static <T> boolean areAllUnique(List<T> list){
    return list.stream().allMatch(t -> {
        return new HashSet<>().add(t);
    });
}
Run Code Online (Sandbox Code Playgroud)

我很惊讶第一种方法有效而另一种方法无效。因为对我来说它们看起来一样

lambda hashset java-8

5
推荐指数
1
解决办法
139
查看次数

Java 17:switch 表达式和语句

我不明白为什么第一个片段编译得很好:

var res = getResult(s);

public static double getResult(Shape s)  {
        switch(s) {
            case Rectangle r : return 2* r.largeur() + 2* r.longueur();
            case Circle c : return  2*c.radius();
            default : throw new RuntimeException("not a shape");
        }
}
Run Code Online (Sandbox Code Playgroud)

但不是这个:

var res = switch(s) {
            case Rectangle r : return 2* r.largeur() + 2* r.longueur();
            case Circle c : return  2*c.radius();
            default : throw new RuntimeException("not a shape");
        };
Run Code Online (Sandbox Code Playgroud)

对我来说看起来是一样的。

switch-statement switch-expression java-17

4
推荐指数
1
解决办法
2455
查看次数

Java8:流和地图转换

我想把变成一个List不同的东西.

我有一个像这样的POJO类(我在这里删除了getters/setters):

public class Person {
   private String personId;
   private String registrationId;
}
Run Code Online (Sandbox Code Playgroud)

A Person(personId)可以有很多registrationId,因此不同的Person实例可以引用同一个真实的人(但具有不同的registrationId).

我有List<Person> persons以下3个元素:

persons = [{"person1", "regis1"}, {"person1", "regis2"}, {"person2", "regis1"}];
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西(这样每个键都指的是一个人,每个人都得到了registrationId列表):

Map<String, List<String>> personsMap = [ "person1" : {"regis1", "regis2"}, "person2" : {"regis2"}]
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

Map<String, List<Person>> map = persons.stream().collect(Collectors.groupingBy(Person::getPersonId));
Run Code Online (Sandbox Code Playgroud)

但我得到了一个Map<String,List<Person>>,我想要一个Map<String,List<String>>

有任何想法吗 ?

谢谢

java collections java-8 java-stream

3
推荐指数
1
解决办法
82
查看次数

Cassandra,Java和MANY异步请求:这样好吗?

我正在用我的表开发一个带有Cassandra的Java应用程序:

id  | registration | name 
 1          1         xxx
 1          2         xxx
 1          3         xxx
 2          1         xxx
 2          2         xxx
...        ...        ...
...        ...        ...
100,000    34        xxx
Run Code Online (Sandbox Code Playgroud)

我的表行数非常多(超过50,000,000).我有一个myListIdsString id遍历.我可以用:

SELECT * FROM table WHERE id IN (1,7,18, 34,...,)
//image more than 10,000,000 numbers in 'IN'
Run Code Online (Sandbox Code Playgroud)

但这是一个糟糕的模式.所以我用这种方式使用异步请求:

    List<ResultSetFuture> futures = new ArrayList<>();
    Map<String, ResultSetFuture> map = new HashMap<>();
   // map : key = id & value = data from Cassandra

    for (String id : …
Run Code Online (Sandbox Code Playgroud)

java asynchronous cassandra

3
推荐指数
1
解决办法
69
查看次数

Spring测试:为什么无法访问application.properties?

我正在构建一个极其简单的 Spring Boot 应用程序。它没有代码,只是一个简单的测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {

    @Value("${my.key}")
    private String key;

    @Test
    public void test() {
        System.out.println(key);
    }
}
Run Code Online (Sandbox Code Playgroud)

my.key是在里面定义的src/main/resources/application.properties(在main/not中test/

测试未通过,因为找不到my.key属性(但如果我将此属性放入其中,src/test/resources/application.properties它就可以工作)

我确信我见过很多 Spring Boot 应用程序,其中测试类从中读取属性/main/resources/application.properties

但在这里它不起作用。

spring-test spring-boot

3
推荐指数
1
解决办法
4220
查看次数

TCP端口和OSI模型

关于 TCP/IP 堆栈,我有一些不明白的地方:端口。有一个 IP 可以识别机器和该机器上特定进程的端口。对我来说,端口与应用层有关;某些进程有一些端口(80 用于 HTTP,25 用于 SMTP 等...)。端口与 TCP 层(传输)无关。端口应该在更高级别(应用层)实现。那么为什么说“TCP端口”而不是“应用程序端口”呢?

谢谢

port tcp osi

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