我想知道stream().toArray [x - > new Integer [x]]如何知道来自哪个数组的大小?我写了一个片段,其中我创建了一个大小为4的整数列表并过滤了值,并创建了一个长度为过滤流的数组,我无法看到任何方法来获取流的大小.
List<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
Integer[] array = intList.stream()
.filter(x -> x > 2)
.toArray(x -> {
System.out.println("x --> " + x);
return new Integer[x];
});
System.out.println("array length: " + array.length);
Run Code Online (Sandbox Code Playgroud)
上述代码的输出:
x --> 2
array length: 2
Run Code Online (Sandbox Code Playgroud)
最初,片段就像
Integer[] array = intList.stream()
.filter(x -> x > 2)
.toArray(x -> new Integer[x]);
Run Code Online (Sandbox Code Playgroud)
只是为了理解它传递的x的值,我必须改变它以在lambda中打印x
我有一个返回对象列表的函数.获取该列表后,我想将每个对象中的字段设置为相同的值.有没有办法可以将下面的三个(模拟)代码行减少到一个?
List<someObjects> aList = functionReturningList();
aList.stream().forEach(m -> m.setField(fieldValue));
anotherList.addAll(aList);
Run Code Online (Sandbox Code Playgroud) 我最近熟悉了volatile关键字,我发现直接从主内存中读取不会导致不一致和所谓的可见性问题.
我相信CPU缓存并不特定于任何线程.所以我想知道这个volatile关键字是否会在单一处理器中有用?
从这个链接,我只是部分理解,至少在某些时候,java嵌套并行流存在问题.但是,我无法推断出以下问题的答案:
假设我有一个外部srtream和一个内部流,两者都使用并行流.事实证明,根据我的计算,如果内部流首先完全并行完成,那么它将更高效(由于数据位置,即L1/L2/L3 CPU缓存中的缓存)(如果且仅cpu核心可用)做外部流.我认为这对大多数人的情况都是如此.所以我的问题是:
Java会首先并行执行内部流,然后在outerstream上工作吗?如果是这样,它是在编译时还是在运行时做出决定?如果在运行时,JIT甚至足够聪明地意识到如果内部流确实具有比核心数量(32)更多的元素(例如数百个),那么它肯定应该使用所有32个内核来处理在从外部流移动下一个元素之前的内部流; 但是,如果元素的数量很小(例如<32),则可以"并行处理"来自"下一个"外部流的元素的元素.
是否能够将此代码嵌入到Optional方法链中:
Optional<Application> appOpt = this.applicationDao.findById(application.getCode());
Application app = appOpt.orElse(Application::new);
if (!appOpt.isPresent()) {
app.get().setUserCreation("user");
app.get().setTimestampCreation(new Date());
}
Run Code Online (Sandbox Code Playgroud)
我想再次使用前一个appOpt对象.我想将所有这些逻辑嵌入Optional方法链中.
我想应该有另一种更优雅的方式来获得它.
我试过玩,ifPresent但它返回void,所以我无法链接orElse方法:
appOpt.ifPresent(a -> {
a.setUserCreation("userCreation"));
app.setTimestampCreation(new Date());
})
.orElse(Application::new);
Run Code Online (Sandbox Code Playgroud)
我希望我解释得那么好.
有任何想法吗?
我想删除所有列表元素,它们的最后一个拆分字符不是作为某个映射中的键创建的.我使用以下代码:
List<String> myList = Arrays.asList("a.b.c,c.d.e".split(","));
myList.add("a.b.c");
Map myMap = new HashMap();
myMap.put("a","dumy");
myList.removeIf(el->!myMap.containsKey(el.substring(el.lastIndexOf('.') + 1)));
Run Code Online (Sandbox Code Playgroud)
我得到以下错误:Method threw 'java.lang.UnsupportedOperationException' exception.
知道我做错了什么吗?
我试图在一个简单的java项目中使用swing API,其中需要在module-info.java中导入javax.swing包
我在 Eclipse IDE 上使用 openJDK-11
module ml.garba.testeur {
requires javax.swing;
}
Run Code Online (Sandbox Code Playgroud)
这是 JFrame 实例
package ml.garba.testeur.vue;
import javax.swing.JFrame;
public class Fenetre_Testeur extends JFrame {
}
Run Code Online (Sandbox Code Playgroud)
似乎swing 包的导入不起作用。
我需要帮助
假设我有员工数据列表。
class Employee {
private long id;
private String name;
private int age;
// Constrctor
// setters & getters
}
List<Employee> empList = ...;
Run Code Online (Sandbox Code Playgroud)
使用上面的empList,如何使用Java8流将年龄> 20的两个不同列表分成一个列表,将年龄<20的两个列表分成一个列表。
CallSite lambdaFactory = LambdaMetafactory.metafactory(
lookup,
"call",
MethodType.methodType(BiConsumer.class),
MethodType.methodType(void.class,Long.class),
lookup.findVirtual(CallClass.class, "call",
MethodType.methodType(void.class,Long.class)),
MethodType.methodType(void.class));
lambdaFactory.getTarget().invoke(callId);
private void call(Long callId){
---
}
Run Code Online (Sandbox Code Playgroud)
我收到此异常 java.lang.invoke.LambdaConversionException: 实例方法 invokeVirtual 调用的参数数量不正确:()void; 0 个捕获参数、0 个功能接口方法参数、0 个实现参数
我正在使用 java 流,但遇到了问题。我有这个代码:
clients.stream()
.map(Client::getDescription)
.map(x -> x.substring(x.lastIndexOf("_v")))
.map(x -> x.substring(2))
.mapToInt(Integer::parseInt)
.max()
.getAsInt();
Run Code Online (Sandbox Code Playgroud)
每个客户端的描述可能是“John_abc_v1”、“Bill_crce_v2”、“Joe_ghhj_V3”……我得到了最大值,在这种情况下是 3……但问题是 v 可以是小写或大写,而我没有知道如何解决,所以这行不工作 .map(x -> x.substring(x.lastIndexOf("_v"))),我得到String index out of range -1的时候“V”是大写的。我该如何解决?任何反馈都将受到赞赏。
java ×10
java-8 ×6
java-stream ×5
concurrency ×1
cpu-cache ×1
forkjoinpool ×1
hashmap ×1
java-11 ×1
java-module ×1
lambda ×1
list ×1
optional ×1
string ×1
swing ×1
volatile ×1