小编Hol*_*ger的帖子

Java 8流的toArray和size参数

我想知道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

java lambda java-8 java-stream

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

将List中的Objects字段设置为相同的值并返回一个列表

我有一个返回对象列表的函数.获取该列表后,我想将每个对象中的字段设置为相同的值.有没有办法可以将下面的三个(模拟)代码行减少到一个?

List<someObjects> aList = functionReturningList();
aList.stream().forEach(m -> m.setField(fieldValue));
anotherList.addAll(aList);
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

如果我在单核机器上运行应用程序,是否有任何用途的volatile关键字?

我最近熟悉了volatile关键字,我发现直接从主内存中读取不会导致不一致和所谓的可见性问题.

我相信CPU缓存并不特定于任何线程.所以我想知道这个volatile关键字是否会在单一处理器中有用?

java multithreading volatile cpu-cache

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

在考虑并行化外部流之前,是否会完全并行处理内部并行流?

从这个链接,我只是部分理解,至少在某些时候,java嵌套并行流存在问题.但是,我无法推断出以下问题的答案:

假设我有一个外部srtream和一个内部流,两者都使用并行流.事实证明,根据我的计算,如果内部流首先完全并行完成,那么它将更高效(由于数据位置,即L1/L2/L3 CPU缓存中的缓存)(如果且仅cpu核心可用)做外部流.我认为这对大多数人的情况都是如此.所以我的问题是:

Java会首先并行执行内部流,然后在outerstream上工作吗?如果是这样,它是在编译时还是在运行时做出决定?如果在运行时,JIT甚至足够聪明地意识到如果内部流确实具有比核心数量(32)更多的元素(例如数百个),那么它肯定应该使用所有32个内核来处理在从外部流移动下一个元素之前的内部流; 但是,如果元素的数量很小(例如<32),则可以"并行处理"来自"下一个"外部流的元素的元素.

java concurrency java-8 forkjoinpool java-stream

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

java可选:如果做某事模式

是否能够将此代码嵌入到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)

我希望我解释得那么好.

有任何想法吗?

java optional

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

java 8:如果在map键中找不到它,则从列表中删除元素

我想删除所有列表元素,它们的最后一个拆分字符不是作为某个映射中的键创建的.我使用以下代码:

   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 list hashmap java-8

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

在module-info中导入swing包

我试图在一个简单的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 包的导入不起作用。

我需要帮助

java swing java-module java-11

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

使用Java 8 Streams如何使用一个列表获取两个不同的列表

假设我有员工数据列表。

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的两个列表分成一个列表。

java java-8 java-stream

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

Java lambda 元工厂

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 lambda-metafactory

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

如何在 Java 8 Streams 中使用小写或大写映射?

我正在使用 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 string java-8 java-stream

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