小编Boa*_*ann的帖子

为什么在 Flux 完成发射元素后,Reactor 项目中的 Schedulers.newParallel() 不停止运行?

我有一个 s 原语FluxString并在main()方法中运行此代码。

    package com.example;
    
    import reactor.core.publisher.Flux;
    import reactor.core.scheduler.Schedulers;
    import reactor.util.Logger;
    import reactor.util.Loggers;
    
    import java.util.Arrays;
    import java.util.List;
    
    public class Parallel {
    
        private static final Logger log = Loggers.getLogger(Parallel.class.getName());
    
        private static List<String> COLORS = Arrays.asList("red", "white", "blue");
    
        public static void main(String[] args) throws InterruptedException {
    
            Flux<String> flux = Flux.fromIterable(COLORS);
    
            flux
                    .log()
                    .map(String::toUpperCase)
                    .subscribeOn(Schedulers.newParallel("sub"))
                    .publishOn(Schedulers.newParallel("pub", 1))
                    .subscribe(value -> {
                        log.info("==============Consumed: " + value);
                    });
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果您尝试运行此代码,应用程序永远不会停止运行,您需要手动停止它。如果我替换.newParallel().parallel()一切正常,并且应用程序正常完成。

为什么它无法自行完成运行?为什么会挂?这种行为的原因是什么?

如果您将此代码作为 JUnit 测试运行,它可以正常工作并且不会挂起。

java scheduler flux project-reactor

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

为什么 HashMap::get 和 HashMap::entry 采用不同类型的键?

的签名HashMap::entry是:

pub fn entry(&mut self, key: K) -> Entry<'_, K, V>
Run Code Online (Sandbox Code Playgroud)

好的,看起来不错。我想从 HashMap 中获取一个条目,其键为K,所以我当然需要给它一个K

然而, 的签名HashMap:get是:

pub fn get<Q>(&self, k: &Q) -> Option<&V>
where
    K: Borrow<Q>,
    Q: Hash + Eq + ?Sized,
Run Code Online (Sandbox Code Playgroud)

现在我完全困惑了。这个复杂的约束是怎么回事?为什么不只是K&K

generics hashmap rust

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

期望这个循环是无限的,但事实并非如此

这是我的Java代码:

public class Prog1 {
    public static void main(String[] args) {
        int x = 5;
        while (x > 1) { 
            x = x + 1;
            if (x < 3)
                System.out.println("small x");   
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

small x
Run Code Online (Sandbox Code Playgroud)

我期待一个无限循环...任何想法为什么它这样做?

java

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

仅RGB的JColorChooser(Java 7)

我正在尝试创建一个包含JPanelJFrame,其中只包含选择RGB颜色所需的内容.我一直在搞乱JColorChooser,AbstractColorChooserPanel和ColorModel,阅读Oracle教程,但我没有理解如何开发我想要的东西.我甚至下载了OpenJDK源来获取这些类的源代码,但仍然没有.我想得到的是:

我想要的是

Alpha的东西应该消失,颜色代码字段应该设置为不可见但继续工作,这样我可以在单击"是"按钮时检索代码(我想在actionPerformed方法中).同样,它是覆盖paintComponent方法的一个很好的补充.

提前致谢.

编辑:这就是我现在拥有的东西(上面的照片,没有'油漆'编辑):

for (final AbstractColorChooserPanel accp : panels) {
  if (accp.getDisplayName().equals("RGB")) {
    JOptionPane.showOptionDialog(Main.frame, accp,
    "Color selection tool", JOptionPane.OK_OPTION,
    JOptionPane.QUESTION_MESSAGE, null, null, 0);
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑2:到目前为止,我已经能够删除alpha的东西,但我还不能"找到"显示颜色代码的标签和字段,所以他们继续显示,另外,因为我可以没有访问该字段,我无法访问颜色代码:

实现

这是这个代码:

package edu.utils;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import java.lang.reflect.Field;

import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.WindowConstants;
import javax.swing.colorchooser.AbstractColorChooserPanel; …
Run Code Online (Sandbox Code Playgroud)

java swing color-picker jpanel

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

什么是c语言的'\'运算符

我正在看的例子是这样的:

#define CONTROL_MEM_SIZE    ((CONTROL_ITEM_SIZE * CONTROL_QUEUE_SIZE) +   \
                            portQUEUE_OVERHEAD_BYTES)
Run Code Online (Sandbox Code Playgroud)

我还没有见过运营商'\'.这是什么?

c

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

将方法限制为随机访问列表

我有一种对 a 进行操作的方法List,删除某些重复项。该算法仅对实现RandomAccess 的列表有效。为了防止误用和令人失望的性能,我想知道如何强制执行该RandomAccess限制。不幸的是,该RandomAccess接口无法扩展List,所以我需要让变量同时成为两种类型。

我可以声明该方法为 AcceptArrayList而不是List,但其他列表类型RandomAccess也可以实现(例如,Collections.synchronizedListand返回的列表Collections.checkedList),并且我不想阻止这些。

我尝试了泛型,但无法构建有效的语法:

public <T> void process(<List<T> extends RandomAccess> list) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以做:

if (!(list instanceof RandomAccess))
    throw new UnsupportedOperationException("RandomAccess list required");
Run Code Online (Sandbox Code Playgroud)

但这种限制仅在运行时强制执行,其稳健性较差。

帮助?

java list random-access

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

为什么我使用wait()/ notify()对象是什么问题,如果我只是想在线程之间发出信号?

所以我有一个经典案例"我的代码可行,但我不知道为什么".

我有一个创建线程的程序,当我从扫描仪接收到某个输入时,我将字符串的控制权传递给工作线程.为此,我创建了我的线程wait(),当我从UI线程获得正确的输入时,我通知().

这是我的代码.为简单起见,我刚刚使用了一个线程.

package main;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;


class ThreadDemo extends Thread {
       private Thread t;
       private String threadName;
       volatile Boolean keepRunning = true;
       private Queue<String> q = new LinkedList<String>();


       ThreadDemo( String name){
           threadName = name;
           System.out.println("Creating " +  threadName );
       }

       public void in(String ex){
           q.add(ex);
           System.out.println("Added " + ex + "to queue of " + threadName);
           synchronized(t){
               t.notify();
           }       
       }


       public void run() {
           System.out.println("Starting to loop.");
            while (keepRunning) {
                try {
                    //Why does it …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading wait thread-synchronization

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

Parse binary string as byte in JavaScript

I have a binary string like "11100011" and I want to convert it into a byte. I have a working example in Java like below:

byte b1 = (byte)Integer.parseInt("11100011", 2);
System.out.println(b1);
Run Code Online (Sandbox Code Playgroud)

Here the output will be -29. But if I write some similar code in JavaScript like below:

parseInt('11100011', 2);
Run Code Online (Sandbox Code Playgroud)

I get an output of 227.

What JavaScript code I should write to get the same output as Java?

javascript java

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

JavaScript中的计算结果与Java不同

我认为我的问题很多.

Java中的计算:

int n = 4451 + 554 * 57;
n = n << 13 ^ n;
System.out.println(n * (n * n * 15731 + 789221) + 1376312589);
=> 587046333
Run Code Online (Sandbox Code Playgroud)

在JavaScript中:

var n = 4451 + 554 * 57;
n = n << 13 ^ n;
console.log(n * (n * n * 15731 + 789221) + 1376312589);
=> 4.043454188561781e+29
Run Code Online (Sandbox Code Playgroud)

JavaScript版本中的问题是什么?如何修复它,以便JavaScript的结果与Java结果相同?

编辑:试过:https://github.com/jtobey/javascript-bignum,但结果是0

var test = new BigInteger(295120061).multiply( new BigInteger(295120061) 
                                      .multiply(new BigInteger(295120061)) 
                                      .multiply(new BigInteger(15731)) 
                                      .add(new BigInteger(789221)))
                                      .add(new BigInteger(1376312589)); …
Run Code Online (Sandbox Code Playgroud)

javascript java math

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

了解Lambda表达式

我不太清楚我是否理解Oracle Java教程中的Lambda表达式教程.令我困惑的主要问题是lambda的Index参数.ds.print(index ->{...} 编译器如何知道甚至是什么值索引?索引未在程序中的任何其他位置声明,因此索引参数甚至引用甚至是什么,编译器如何知道?

有问题:

public class DataStructure {

    private final static int SIZE = 15;
    private int[] arrayOfInts = new int[SIZE];

    public DataStructure() {
        for (int i = 0; i < SIZE; i++) {
            arrayOfInts[i] = i;
        }
    }

    public int size() {
        return SIZE;
    }

    public int get(int index) {
        return arrayOfInts[index];
    }

    interface DataStructureIterator extends java.util.Iterator<Integer> { }

    private class EvenIterator implements DataStructureIterator {

        private int nextIndex = 0;

        public boolean hasNext() {
            return (nextIndex <= …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

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