小编War*_*ard的帖子

关于集合的Java可修改视图

我想解决以下问题:
从集合A开始,我想将该集合(比如集合B)上的某种"视图"传递给某个方法.视图B不必包含原始集合A的所有元素.如果在此方法中将对象添加到视图(集合B)或从视图中删除,则这些更改也应反映在原始集合A上.

例如(伪代码):

  1. 开始情况:

    Collection A = {1, 2, 3};  
    View-on-collection B = {1, 2};
    
    Run Code Online (Sandbox Code Playgroud)
  2. 方法调用:

    someMethod(B) {  
        B.add(4);  
        B.remove(2);  
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 结束情况:

    Collection A = {1, 3, 4};
    
    Run Code Online (Sandbox Code Playgroud)

有谁知道这个问题的巧妙解决方案?

java collections data-structures

7
推荐指数
2
解决办法
711
查看次数

一个线程可以同时处理多个请求吗?

这个问题是针对 Tomcat 的,但一般适用于其他应用程序服务器 / Servlet 容器的答案也会很有趣。

根据我的理解,可以保证每个请求都由来自请求处理线程池的单个线程处理(让我们忽略应用程序请求处理代码异步执行某些工作的情况)。

但我想知道的是,如果保证一个线程只会一个请求在同一时间

换句话说,是否有可能抢占在线程 T1 上执行的请求 R1 的工作,然后使用该线程 T1 处理请求 R2,然后在 T1 上继续处理 R1 ?

可能这个问题可以更概括为:在线程 T1 上执行 Runnable R1 是否可以“抢占”以支持在同一线程T1执行另一个 Runnable R2 ?

我无法摆脱那种唠叨的感觉,即我只是忽略了 Java 中多线程的某种基本原则,所以请赐教!

java multithreading tomcat

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

如何使函数Serializable以通用方式

我知道我们可以将函数转换为Serializable需要它的位置.

但是,我想将此转换移动到通用方法,以使使用代码更简洁.我无法创建这样的方法.

我的具体问题是下面的地图不是Serializable:

final Map<MyObject, String> map =
        new TreeMap<>(Comparator.comparing(MyObject::getCode));
Run Code Online (Sandbox Code Playgroud)

我可以通过使用:

final Map<MyObject, String> map =
        new TreeMap<>(Comparator.comparing((Function<MyObject, String> & Serializable) MyObject::getCode));
Run Code Online (Sandbox Code Playgroud)

但我希望能够做到这样的事情:

final Map<MyObject, String> map =
        new TreeMap<>(Comparator.comparing(makeSerializable(MyObject::getCode)));

public static <T, U> Function<T, U> makeSerializable(Function<T, U> function) {
    return (Function<T, U> & Serializable) function;
}
Run Code Online (Sandbox Code Playgroud)

对于编译器这很好,但在运行时,我得到一个ClassCastException:

java.lang.ClassCastException: SerializableTest$$Lambda$1/801197928 cannot be cast to java.io.Serializable
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下替代方案,但没有成功:

// ClassCastException
public static <T extends Serializable, U extends Serializable> Function<T, U> makeSerializable(Function<T, U> …
Run Code Online (Sandbox Code Playgroud)

java generics lambda comparator java-8

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