我有一个Map如下所示:
Map<Character, Integer> map = new LinkedHashMap<Character, Integer>();
map.put('c', 5);
map.put('f', 2);
map.put('r', 1);
map.put('D', 3);
Run Code Online (Sandbox Code Playgroud)
我需要获得输出:
cccccffrDDD
Run Code Online (Sandbox Code Playgroud)
我可以在正常过程中做到这一点,但我想在 Java 8 中做到这一点。你能分享一些如何实现这一点的提示吗?
下面的第一个作业无法编译,但我不确定为什么,静态方法的方法签名与函数方法签名匹配,尽管它不使用类型参数。尽管第二行除了类型参数化之外具有相同的签名,但编译良好。
这背后的原因是什么?
public class GenericSample<T> {
public static void staticLambdaMtd(Integer a) {
}
public static<X> void staticLambdaMtd2(X a) {
}
// Funca<T> fa1 = GenericSample::staticLambdaMtd;//does not compile !
Funca<T> fa = GenericSample::staticLambdaMtd2;//does compile !
}
interface Funca<A> {
public void funct(A a);
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
new Random().ints()
.map(i -> i / 2)
.limit(100)
.toArray()
Run Code Online (Sandbox Code Playgroud)
...并且它按预期工作。
但这不起作用:
new Random().ints()
.sorted()
.map(i -> i / 2)
.limit(100)
.toArray()
Run Code Online (Sandbox Code Playgroud)
它抛出:
Exception in thread "main" java.lang.IllegalArgumentException: Stream size exceeds max array size
Run Code Online (Sandbox Code Playgroud)
limit 不应该使流短路并帮助将其限制为 100 个元素吗?
我有一个如下所示的对象:
public class Resource {
int level;
String identifier;
boolean isEducational;
public Resource(String level, String identifier, boolean isEducational) {
this.level = level;
this.identifier = identifier;
this.isEducational = isEducational;
}
// getter and setters
}
Run Code Online (Sandbox Code Playgroud)
这些资源的列表如下:
List<Resource> resources = Arrays.asList(new Resource(4, "a", true ),
new Resource(4, "b", false),
new Resource(3, "c", true ),
new Resource(3, "d", false ),
new Resource(2, "e", true ),
new Resource(2, "f" , false));
Run Code Online (Sandbox Code Playgroud)
我想按其属性对这个列表进行排序,但是这种排序应该针对资源和非资源level分别进行。isEducationalisEducational
因此,排序后,结果列表应按以下顺序排列:
[Resource e, Resource c, Resource …Run Code Online (Sandbox Code Playgroud) 我Student使用 java 8 的自然排序方法迭代所有数据sorted()。迭代学生数据时,在 IDE 控制台中出现异常class com.java8.Student cannot be cast to class java.lang.Comparable。我的StreamStudent.java文件在com.java8包内。
这是我的完整堆栈跟踪:
Exception in thread "main" java.lang.ClassCastException: class com.java8.Student cannot be cast to class java.lang.Comparable (com.java8.Student is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
at java.base/java.util.Comparators$NaturalOrderComparator.compare(Comparators.java:47)
at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
at java.base/java.util.TimSort.sort(TimSort.java:220)
at java.base/java.util.Arrays.sort(Arrays.java:1307)
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:353)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at com.java8.StreamStudent.main(StreamStudent.java:72)
Run Code Online (Sandbox Code Playgroud)
下面是我的代码:
package com.java8;
import java.util.*; …Run Code Online (Sandbox Code Playgroud) Instant我正在尝试根据本文中的参考从对象创建 ISO 8601 格式的 DateTime,我使用该格式YYYY-MM-DD'T'hh:mm:ss'T'ZD来解析即时日期,如下所示。
但它生成的时间格式错误:
2022-06-172T06:08:13T-0500172
Run Code Online (Sandbox Code Playgroud)
预期的格式应该是:
2022-06-21T13:31:49-05:00
Run Code Online (Sandbox Code Playgroud)
我的代码:
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("YYYY-MM-DD'T'hh:mm:ss'T'ZD")
.withZone(ZoneId.systemDefault());
formatter.format(Instant.now())
Run Code Online (Sandbox Code Playgroud)
如何生成如下所示的格式化时间?
2022-06-21T13:31:49-05:00
Run Code Online (Sandbox Code Playgroud) 我已在编译器中运行此代码并得到输出 1,但我不明白它将如何成为 1。请用答案解释。
public class Main {
public static void main(String args[]) {
int a = 10;
int b = 2;
System.out.println((a < b) ? a++ : --b);
}
}
Run Code Online (Sandbox Code Playgroud) 这是我的代码,但我发现它不好。在JDK8中我可以只使用一个流表达式来获得两个条件的结果吗?我想确保id条件是第一个,名称条件是第二个。
public Student getStudent(String id,String name) {
try {
List<Student> students = studentDao.getStudent();
if (CollectionUtils.isNotEmpty(students)) {
Student studentDomain=students.stream()
.filter(p -> id .equals(p.getId()))
.findAny().orElse(null);
if(studentDomain==null){
studentDomain=students.stream()
.filter(p -> name.equals(p.getName()))
.findAny()
.orElse(null);
}
return studentDomain;
} else {
return null;
}
}catch (Exception ex){
return null;
}
}
Run Code Online (Sandbox Code Playgroud) 我需要从 an 中的每个元素获取一个对象Iterable并将其添加到List.
我可以使用下面的代码来做到这一点。ImmutableList但是,有没有什么方法可以在不显式实例化的情况下创建 Guava List?
List<Data> myList = new ArrayList<>();
myIterable.forEach(val ->
myList.add(val.getMetaData())
);
Run Code Online (Sandbox Code Playgroud) 我想创建一个模拟库类来实现InvocationHandlerJava Reflection 的接口。
这是我创建的模板:
import java.lang.reflect.*;
import java.util.*;
class MyMock implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// todo
}
public MyMock when(String method, Object[] args) {
// todo
}
public void thenReturn(Object val) {
// todo
}
}
Run Code Online (Sandbox Code Playgroud)
when 和 thenReturn 方法是链式方法。
然后when方法注册给定的模拟参数。
thenReturn方法注册给定模拟参数的预期返回值。
另外,如果代理接口调用方法或使用未注册的参数,我想抛出 java.lang.IllegalArgumentException 。
这是一个示例界面:
interface CalcInterface {
int add(int a, int b);
String add(String a, String b);
String getValue();
}
Run Code Online (Sandbox Code Playgroud)
这里我们有两个重载add …
java ×10
java-8 ×10
java-stream ×4
collectors ×1
comparable ×1
covariance ×1
datetime ×1
generics ×1
guava ×1
hashmap ×1
interface ×1
java-time ×1
mocking ×1
reflection ×1
sorting ×1
string ×1