小编ern*_*t_k的帖子

Java 8 Collectors.groupingBy with map value将收集结果设置为同一个集合

示例中使用的对象来自包 org.jsoup.nodes

import org.jsoup.nodes.Attribute;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
Run Code Online (Sandbox Code Playgroud)

我需要按键的组属性和结果值Set.

Optional<Element> buttonOpt = ...;
Map<String, Set<String>> stringStringMap =
    buttonOpt.map(button -> button.attributes().asList().stream()
            .collect(groupingBy(Attribute::getKey, 
                  mapping(attribute -> attribute.getValue(), toSet()))))
            .orElse(new HashMap<>());
Run Code Online (Sandbox Code Playgroud)

它似乎正确收集,但值始终是单个字符串(因为库实现)包含按空格分割的不同值.试图改善解决方案:

Map<String, Set<HashSet<String>>> stringSetMap = buttonOpt.map(
        button -> button.attributes()
            .asList()
            .stream()
            .collect(groupingBy(Attribute::getKey, 
                        mapping(attribute -> 
                          new HashSet<String>(Arrays.asList(attribute.getValue()
                                                                .split(" "))),
                   toSet()))))
  .orElse(new HashMap<>());
Run Code Online (Sandbox Code Playgroud)

结果我有不同的结构,Map<String, Set<HashSet<String>>>但我需要Map<String, Set<String>>

我已经检查了一些收藏家,但没有解决我的问题.

问题是:

如何合并与相同属性键相关的所有集合?

java lambda java-8 java-stream collectors

14
推荐指数
3
解决办法
1152
查看次数

按位乘法并在Java中添加

我有使用乘法和加法的方法,但我只是无法理解它们.它们都来自外部网站而不是我自己的网站:

public static void bitwiseMultiply(int n1, int n2) {
    int a = n1, b = n2, result=0;
    while (b != 0) // Iterate the loop till b==0
    {
        if ((b & 01) != 0) // Logical ANDing of the value of b with 01
        {
            result = result + a; // Update the result with the new value of a.
        }
        a <<= 1;              // Left shifting the value contained in 'a' by 1.
        b >>= 1;             // Right shifting …
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation multiplication addition bitwise-operators

13
推荐指数
3
解决办法
3万
查看次数

numpy.unique为集列表提供错误的输出

我有一个列表,

sets1 = [{1},{2},{1}]
Run Code Online (Sandbox Code Playgroud)

当我使用numpy的在列表中找到唯一元素时unique,我得到

np.unique(sets1)
Out[18]: array([{1}, {2}, {1}], dtype=object)
Run Code Online (Sandbox Code Playgroud)

可以看出,结果是错误的,就像{1}在输出中重复的一样。

当我通过使相似元素相邻来更改输入的顺序时,不会发生这种情况。

sets2 = [{1},{1},{2}]

np.unique(sets2)
Out[21]: array([{1}, {2}], dtype=object)
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?还是我做的方式有问题?

python numpy list set

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

具有多个匹配目标类型的 lambda 表达式的方法签名选择

我在回答一个问题时遇到了一个我无法解释的场景。考虑这个代码:

interface ConsumerOne<T> {
    void accept(T a);
}

interface CustomIterable<T> extends Iterable<T> {
    void forEach(ConsumerOne<? super T> c); //overload
}

class A {
    private static CustomIterable<A> iterable;
    private static List<A> aList;

    public static void main(String[] args) {
        iterable.forEach(a -> aList.add(a));     //ambiguous
        iterable.forEach(aList::add);            //ambiguous

        iterable.forEach((A a) -> aList.add(a)); //OK
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么显式键入 lambda 的参数(A a) -> aList.add(a)会使代码编译。此外,为什么它链接到 inIterable而不是in 的重载CustomIterable
对此是否有一些解释或规范相关部分的链接?

注意:iterable.forEach((A a) -> aList.add(a));仅在CustomIterable<T>扩展时编译Iterable<T>(完全重载方法CustomIterable导致歧义错误)


在两者上都得到这个: …

java generics lambda javac ecj

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

如何为每个请求项创建多个线程

我正在尝试在订单级别使用多线程处理以下代码。

List<String> orders = Arrays.asList("order1", "order2", 
                   "order3", "order4", "order1");
Run Code Online (Sandbox Code Playgroud)

当前顺序执行:

orders.stream().forEach(order -> {
    rules.forEach(rule -> {
        finalList.add(beanMapper.getBean(rule)
                .applyRule(createTemplate.apply(getMetaData.apply(rule), command),
                           order));
    });
});
Run Code Online (Sandbox Code Playgroud)

我试过使用:

orders.parallelStream().forEach(order -> {}} // code snippet.
Run Code Online (Sandbox Code Playgroud)

但它正在改变rules.forEach(rule -> {}}顺序。

例如:
输入:

 List<String> orders = Arrays.asList("order1", "order2", 
                         "order3", "order4", "order1");
 List<String> rules = Arrays.asList("rule1", "rule2", "rule3");
Run Code Online (Sandbox Code Playgroud)

预期输出:

order1 with rule1, rule2, rule3
order2 with rule1, rule2, rule3
Run Code Online (Sandbox Code Playgroud)

实际输出parallelStream()

order1 with rule3, rule1, rule2
order1 with rule2, rule1, rule3
Run Code Online (Sandbox Code Playgroud)

我不担心命令的顺序,但我担心规则的顺序。订单可以按任何顺序处理,但规则应按每个订单的相同顺序执行。

请帮忙。

java multithreading java-8 java-stream

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

从本地 jupyter 笔记本连接到 Spark 集群

我尝试从本地计算机上的笔记本连接到远程 Spark Master。

当我尝试创建 SparkContext 时

sc = pyspark.SparkContext(master = "spark://remote-spark-master-hostname:7077", 
                          appName="jupyter notebook_test"),
Run Code Online (Sandbox Code Playgroud)

我收到以下异常:

/opt/.venv/lib/python3.7/site-packages/pyspark/context.py in __init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls)
    134         try:
    135             self._do_init(master, appName, sparkHome, pyFiles, environment, batchSize, serializer,
--> 136                           conf, jsc, profiler_cls)
    137         except:
    138             # If an error occurs, clean up in order to allow future SparkContext creation:

/opt/.venv/lib/python3.7/site-packages/pyspark/context.py in _do_init(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, jsc, profiler_cls)
    196 
    197         # Create the Java SparkContext …
Run Code Online (Sandbox Code Playgroud)

py4j apache-spark pyspark jupyter-notebook

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

Keycloak.loadUserProfile() 上的 Keycloak 403(禁止)

我是 Keycloak 的新手。我尝试使用以下代码获取用户信息:

keycloakAuth.loadUserProfile().success(function(profile) {
  debugger
        console.log(profile);
    }).error(function(res) {
      debugger
        console.log('Failed to load profile');
    });
Run Code Online (Sandbox Code Playgroud)

安装json是:

{
  "realm": "CheckRealm",
  "realm-public-key": "MIIBIjASDFJJK677132HJJAOCAQ8AMIIBCgKCAQEAgo4deAfr8BeqWOiCsddwMtH5nh8EK2cKIeInpt7LnoCyMsGj1HTP835HpslOURrR6Bgc42V7r6J/MIHqx3+KESTqpcQSe9ll6eUjzaMbIX2GPmy9OnviH6srUgOlDAKhL+/SDh/iv8RfErAPO9cxnoBWUUTyfyes1YRn34KILBdHZoaWk5mteJx9aV4bfA5tGTT6aF8o1NkCX1OUfXiaAD5sqKZV5vbI+QsOUsNshvGfE5JR2EpwZbWH/vRQVusxLURjC51v96ieQ8zUME5LwAQ0TgZcspHTb4Y+KuYRTuDQKuxRUYFeNbvqUGeT2s2sHMmWOQIDAQAB",
  "auth-server-url": "https://something.com/auth",
  "url": "https://something.com/auth",
  "ssl-required": "external",
  "resource": "sample-tracker",
  "clientId": "sample-tracker",
  "credentials": {
    "secret": "bnmbsdk87wq"
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到了提到的错误:加载资源失败:服务器响应状态为 403(禁止)

angularjs keycloak

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

Java 中涉及 throws 子句的类型推理解析过程

考虑JLS \xc2\xa718.1.3 - 边界中的以下文章

\n

在这里,当我们尝试识别推理变量的边界集时,我们会遇到以下情况之一:

\n
\n

...

\n
    \n
  • throws \xce\xb1:推理变量 \xce\xb1 出现在 throws 子句中。
  • \n
\n

...

\n

throws \xce\xb1 形式的界限纯粹是信息性的:它指示解析优化 \xce\xb1 的实例化,以便在可能的情况下,它不是受检查的异常类型

\n
\n

我认为这个说法是不正确的:

\n
    \n
  • 这是因为理想情况下,提到 throws 子句是为了处理代码执行过程中可能发生的已检查异常。
  • \n
  • 那么为什么 JLS 仍然阻止\xce\xb1成为受检查的异常?
  • \n
  • 理想情况下,推理变量 \xce\xb1必须限制为Checked 类型的异常,而不是Unchecked 变体
  • \n
\n

我的理解正确还是我错过了什么?

\n

java generics type-inference jls

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

Spark.executor.instances 超过 Spark.dynamicAllocation.enabled = True

我正在使用 MapR 发行版的 Spark 项目工作,其中启用了动态分配。请参考以下参数:

spark.dynamicAllocation.enabled         true
spark.shuffle.service.enabled           true
spark.dynamicAllocation.minExecutors    0
spark.dynamicAllocation.maxExecutors    20
spark.executor.instances                2
Run Code Online (Sandbox Code Playgroud)

根据我的理解,spark.executor.instances 是我们在提交 pySpark 作业时定义为 --num-executors 的内容。

我有以下两个问题:

  1. 如果我--num-executors 5在作业提交期间使用它会覆盖spark.executor.instances 2配置设置吗?

  2. spark.executor.instances当动态分配最小和最大执行器已经定义时定义的目的是什么?

apache-spark pyspark

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

最终变量首先初始化

我在这里读到这个问题:Java:静态最终字段以什么顺序初始化?

根据答案

“除了最终类变量和值为编译时常量的接口字段首先被初始化......”

我认为这是不正确的,因为以下操作会失败:

static {
    String y = x;
}

public static final String x = "test";
Run Code Online (Sandbox Code Playgroud)

在静态块中,x不被识别。如果这个答案是正确的,有人可以发表评论吗?

java static initialization

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