小编Hol*_*ger的帖子

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

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

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

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

java concurrency java-8 forkjoinpool java-stream

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

如何使用ASM修改常量池?

我已经从这篇文章中了解了如何在运行时使用ASM操作类。

但是我还有一个关于如何修改常量池的问题。以下是我要修改的示例Java程序

主jar文件:

    public class test {    
    private static final String a = "Hello World";
    private static final String b = "ASM is awasome";

    public static void main(String[] args) { 
         int x = 10;
         int y = 25;
         int z = x * y;
         System.out.println(a);
         System.out.println(z);
         System.out.println(b);

    }

}
Run Code Online (Sandbox Code Playgroud)

我想将变量a从修改"Hello World""Multiply Of x*y is: "

我的特工班

import java.lang.instrument.*;
import java.security.ProtectionDomain;
import org.objectweb.asm.*;

public class ExampleAgent implements ClassFileTransformer {
    private static final String TRANSFORM_CLASS …
Run Code Online (Sandbox Code Playgroud)

java java-bytecode-asm jvm-bytecode

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

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
查看次数

分配后是否共享 TLAB 分配的对象?

JVM Eden 空间中 TLAB 的设计让我感到困惑。我的问题是,如果对象是由 TLAB 中的一个线程分配的,那么它之后如何与其他线程共享?一个线程专有的TLAB区域会被重新组装,还是对象会被移出?

jvm memory-management heap-memory

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

Java8 lambda 从 List&lt;?&gt; 中删除元素并更新布尔标志值

我必须设置一个标志nameRemoved=true,当我从List<String>

这是我在这里使用的传统方法。

List<String> list = new ArrayList<String>();
if (list.contains("abc")) {
    list.remove("abc");
    nameRemoved=true
}

Run Code Online (Sandbox Code Playgroud)

我可以使用下面的方法从列表中删除元素,但如何将标志值设置为nameRemoved=true使用 lambda 语法?

List<String> list = new ArrayList<String>();
list.removeIf(name -> name.equalsIgnoreCase("abc"));
Run Code Online (Sandbox Code Playgroud)

java collections lambda java-8

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

在 POJO 中使用 Java Streams 作为属性是一个好习惯吗

我只是第一次看到这个,我想知道这是一个很好的做法还是一如既往地视情况而定。

使用流作为域中的属性而不是列表。

public class MyDomain {

    Integer id;
    Stream<SubDomain> subDomains;

}
Run Code Online (Sandbox Code Playgroud)

java collections list java-stream

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