我有一个,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转换的情况下如何返回空输出的任何想法?
*.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注释时,我不太明白这一点.这是一个例子:
我创建一个@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应该做的每一件事吗?
谢谢
我对数组语法有些不理解。例如我可以这样做:
int[] tab = {1,2,3};
假设我有一个接受数组作为参数的方法,我可以这样做:
myMethod(tab);
但为什么我不能这样做:
myMethod({1,2,3})
为什么我必须添加一个额外的“new int[]”,如下所示:
Method(new int[] {1,2,3})
我想知道我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)
我很惊讶第一种方法有效而另一种方法无效。因为对我来说它们看起来一样
我不明白为什么第一个片段编译得很好:
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)
对我来说看起来是一样的。
我想把变成一个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>>
有任何想法吗 ?
谢谢
我正在用我的表开发一个带有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).我有一个myListIds的String 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) 我正在构建一个极其简单的 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
但在这里它不起作用。
关于 TCP/IP 堆栈,我有一些不明白的地方:端口。有一个 IP 可以识别机器和该机器上特定进程的端口。对我来说,端口与应用层有关;某些进程有一些端口(80 用于 HTTP,25 用于 SMTP 等...)。端口与 TCP 层(传输)无关。端口应该在更高级别(应用层)实现。那么为什么说“TCP端口”而不是“应用程序端口”呢?
谢谢
java ×6
java-8 ×3
java-stream ×2
annotations ×1
arrays ×1
asynchronous ×1
cassandra ×1
class ×1
collections ×1
hashset ×1
integer ×1
java-17 ×1
java-ee ×1
jvm ×1
lambda ×1
oop ×1
osi ×1
port ×1
reflection ×1
spring ×1
spring-boot ×1
spring-test ×1
tcp ×1