标签: java-8

使用 CompletableFuture 时以下有什么问题?

我是 CompletableFuture 的新手,这是一个我想尝试的简单方法

 CompletableFuture.supplyAsync( ()-> {System.out.println("async");});
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,出现错误

Error:(23, 26) java: no suitable method found for supplyAsync(()->{ Syst[...]"); })
    method java.util.concurrent.CompletableFuture.<U>supplyAsync(java.util.function.Supplier<U>) is not applicable
      (cannot infer type-variable(s) U
        (argument mismatch; bad return type in lambda expression
          missing return value))
    method java.util.concurrent.CompletableFuture.<U>supplyAsync(java.util.function.Supplier<U>,java.util.concurrent.Executor) is not applicable
      (cannot infer type-variable(s) U
        (actual and formal argument lists differ in length))
Run Code Online (Sandbox Code Playgroud)

我想知道上面的内容有什么问题吗?

java java-8

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

当我尝试在网站上进行查询时出现“查询数据包太大”错误

我再次需要你的帮助。我正在尝试将我的 java 网站上线。

我用什么:

  • MySQL 服务器:命令行 mysql -V,结果:mysql Ver 15.1 Distrib 10.1.23-MariaDB,对于 debian-linux-gnu (x86_64) 使用 readline 5.2
  • 辣椒
  • Debian服务器
  • 爪哇(瓦丁)

用于查询的数据包太大 (4739923 > 1048576)。您可以通过设置 max_allowed_pa​​cket' 变量在服务器上更改此值。

我尝试过的:

1.就像错误所说的那样,我尝试通过执行以下操作来更改服务器上的值:

  • 登录我的服务器
  • 使用以下命令连接到 MySQL:mysql -u root
  • 进入 :SET GLOBAL max_allowed_packet=1073741824;
  • 然后,使用以下命令重新启动服务器:/etc/init.d/mysql restart

但我仍然有错误。

2.我查看了:如何更改 max_allowed_pa​​cket 大小

但是,当我执行此操作时nano /etc/mysql/my.cnf,文件看起来像(我没有任何 [mysql]):

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Nov 10 23:57:02 2017 from 82.236.220.195
root@XXXX:~# …
Run Code Online (Sandbox Code Playgroud)

mariadb apache-cayenne java-8 max-allowed-packet

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

泛型情况下 lambda 中的返回类型错误

拥有这个泛型代码

\n\n
static final <T> List<Class<? extends T>> findSubClasses(Class<T> clz, String packageName){\n    ClassPathScanningCandidateComponentProvider provider =\n                new ClassPathScanningCandidateComponentProvider(false);\n    provider.addIncludeFilter(new AssignableTypeFilter(clz));\n    Set<BeanDefinition> beanDefinitions = provider.findCandidateComponents(packageName);\n    List<Class<? extends T>> subClasses = beanDefinitions.stream().map(b->mapToClass(b, clz)).collect(Collectors.toList());\n        return subClasses;\n}\n\nprivate static final <T> Class<? extends T> mapToClass(BeanDefinition beanDefinition, Class<T> clz) {\n   String className = beanDefinition.getBeanClassName();\n   try {\n       return (Class<? extends T>) Class.forName(className);\n   } catch (ClassNotFoundException e) {\n       log.error("Failed to load the scanned class {}", className, e);\n   }\n   return null;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在b->mapToClass(b, clz)

\n\n
Bad\xc2\xa0return\xc2\xa0type\xc2\xa0in\xc2\xa0lambda\xc2\xa0expression:\xc2\xa0Class<capture\xc2\xa0of\xc2\xa0?\xc2\xa0extends\xc2\xa0T>\xc2\xa0cannot\xc2\xa0be\xc2\xa0converted\xc2\xa0to\xc2\xa0Class<Object>\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何解决这个问题?

\n

java generics lambda compiler-errors java-8

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

Java 8 流上的缓冲区运算符

我正在尝试编写一个 java 8 流收集器,它反映了rxjava 缓冲区运算符的功能

我有一个工作代码:

// This will gather numbers 1 to 13 and combine them in groups of
// three while preserving the order even if its a parallel stream.
final List<List<String>> triads = IntStream.range(1, 14)
        .parallel()
        .boxed()
        .map(Object::toString)
        .collect(ArrayList::new, accumulator, combiner);

System.out.println(triads.toString())
Run Code Online (Sandbox Code Playgroud)

这里的累加器是这样的:

final BiConsumer<List<List<String>>, String> accumulator = (acc, a) -> {
      StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.append("Accumulator|");
      stringBuilder.append("Before: ").append(acc.toString());
      int accumulatorSize = acc.size();
      if (accumulatorSize == 0) {
        List<String> newList = new ArrayList<>();
        newList.add(a);
        acc.add(newList); …
Run Code Online (Sandbox Code Playgroud)

java functional-programming java-8 rx-java java-stream

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

在 lambda 中使用堆栈时正在打印 FIFO

我正在尝试将十进制值转换为二进制值,我已使用堆栈作为数据结构。当使用普通的堆栈弹出时,它以正确的顺序打印我,例如 4 的二进制转换将为 100。但我是 java 8 的新手,并尝试尽可能多地使用 lambda 来学习,并在执行过程中,我意识到它打印 FIFO ex for 4 它正在打印 001。请找到下面的代码并让我知道我哪里做错了。

package com.interview.random;

import java.util.Stack;

public class ConvertDecimalToBinary {

public Stack<Integer> convertToBinary(int num){
    Stack<Integer> st=new Stack<>();
    while(num>1){
        st.push(num%2);
        num=num/2;
    }
    st.push(num);
    return st;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Stack<Integer> st=new ConvertDecimalToBinary().convertToBinary(4);

    //printing correctly
    while(!st.isEmpty()){
        System.out.println(st.pop());
    }

    //Printing in FIFO not correct 
    st.forEach(i->System.out.println(i));
}
Run Code Online (Sandbox Code Playgroud)

}

lambda java-8

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

Java 8 比较器 keyExtractor

在Java 8 Comparator中,我们可以如下创建一个比较器。

Comparator.comparing(keyExtractor);
Run Code Online (Sandbox Code Playgroud)

目前我有一堂课如下

class Employee {
    String name;
    Department dept;
}

class Department {
    String departmentName;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我想为 Employee 类创建一个比较器,根据部门名称对记录进行排序,我该如何编写我的密钥提取器?

尝试了下面的代码,但没有成功。

Comparator.comparing(Employee::getDept::getDepartmentName);
Run Code Online (Sandbox Code Playgroud)

java comparator java-8

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

使用键对将三元组列表分组到映射中

我有一个清单triples

List<Triple<String, String, String>> triplets; 
Run Code Online (Sandbox Code Playgroud)

我想分组成这样的地图

Map<Pair<String, String>, String> mapping;
Run Code Online (Sandbox Code Playgroud)

value地图的哪里是三元组的第三个元素。如果发生相同的情况,key它应该覆盖剩余的第三个值。

例如

def triples = [ {a, b, c} ; {a, d, e} ; {a, b, f } ]
// grouping
def map = [ {a,b} : c ; {a, d} : e ]
Run Code Online (Sandbox Code Playgroud)

如何使用Java 8及其grouping在流中做到这一点?

java java-8

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

意外字符('='(代码 61)):解析 JsonString 时

解析 JSONString ( assigned=[util.TaskAudit@24c7b944]}) 时如下:

Map<String, List<TaskAudit>> auditTrailMap = new HashMap<>();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

try {
    auditTrailMap = mapper.readValue(strObject, new TypeReference<Map<String, List<TaskAudit>>>(){});
} catch (IOException e) {
    log.error("{}", e);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下异常:

com.fasterxml.jackson.core.JsonParseException:意外的字符('='(代码61)):期望用冒号分隔字段名称和值[junit],位于[来源:{assigned=[util.TaskAudit@24c7b944]} ; 行:1,列:11]

任何人都可以提供有关如何解决该问题的任何线索。

编辑:基本上这个函数的输入是来自数据库的字符串字段。保存时我们这样保存:

        Map<String, List<TaskAudit>> auditTrailMap = new HashMap<>();
        auditTrailMap.put("assigned", taskAuditList);
        String jsonString =  new JSONObject(auditTrailMap).toString();
Run Code Online (Sandbox Code Playgroud)

但是,在尝试解析 jsonString 时,它就像 (signed=[util.TaskAudit@24c7b944]}) 一样,我不知道“=”来自哪里以及如何解析它。

java jackson java-8 jsonparser

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

无法启动场景生成器

每当我尝试使用 Intellij 的 scenebuilder 打开 fxml 文件时,它都会给出以下信息:

Failed to start SceneBuilder: "C:\Program Files (x86)\Oracle\JavaFX Scene Builder 2.0"
Run Code Online (Sandbox Code Playgroud)

1

(我已经从设置中输入了场景生成器的路径)

javafx intellij-idea java-8 scenebuilder

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

keytool 错误:java.io.FileNotFoundException:cacerts(访问被拒绝)

这个问题已被问过多次,但没有一个解决方案对我有用。我以管理员身份运行 DOS 命令窗口,但是当运行 keytool 命令来安装证书时,出现上述错误:

C:\Program Files\Java\jdk1.8.0_191\jre\lib\security>keytool -import -file xxx.yyy.zzz.crt -alias xxxx.yyy.zzz.com -keystore cacerts -storepass changeit -noprompt
Certificate was added to keystore
keytool error: java.io.FileNotFoundException: cacerts (Access is denied)
Run Code Online (Sandbox Code Playgroud)

我使用的是 Windows 10,JDK 1.8.0_191。为什么管理员的访问会被拒绝?

keytool java-8 windows-10

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