标签: java-8

How to get a Type from class name in Java

I am deserializing json that contains instances of many different classes, using gson. The following works as long as I know all the classes up front:

    String receivedPayloadStr = receivedMessage.get("payload");
    Type payloadType = getType(receivedMessage.get("type").toString());
    Object typedPayload = gson.fromJson(payloadJson, payloadType);
    System.out.println(typedPayload);
Run Code Online (Sandbox Code Playgroud)

My getType function is as follows:

static Type getType(String typeName){
    switch (typeName){
        case "mypackage1.MyThing1":
            return new TypeToken<MyThing1>() {}.getType();
        case "mypackage2.MyThing1":
            return new TypeToken<MyThing2>() {}.getType();
        default:
            throw new RuntimeException("Unsupported type: " + typeName);
    }
}
Run Code Online (Sandbox Code Playgroud)

短期有效,但既丑陋又脆弱。显然,我们想要一种更易于维护的方法。有没有办法以通用方式实现 getType ,以便支持所有已知类?

编辑:我们不仅限于 gson。如果另一个库使任务更容易,我们可以切换到它。

java gson java-8

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

用于访问多个客户端的嵌入式 Derby DB

我编写基于Java SE 8的桌面应用程序。它有我的应用程序附带的Derby DB (v10.13.1.1)。我使用Hibernate ORM框架 (v5.2.10.Final) 与 DB 进行通信,并使用Spring框架 (spring-orm @ v4.3.7.RELEASE),这也有助于它。

如果我一次将我的应用程序作为一个实例运行,一切都很好 - 数据库不会引起任何问题。但是,如果我创建应用程序的多个实例,或者同时使用数据库客户端 DBeaver 访问数据库,则会导致以下异常:

[AWT-EventQueue-0] DEBUG (124 : 2017-07-28 22:14:57,245) org.hibernate.engine.jdbc.spi.SqlExceptionHelper  - Unable to acquire JDBC Connection [n/a]
java.sql.SQLException: Failed to start database 'M_Vezelis_Draw_DB_1_6v.db' with class loader sun.misc.Launcher$AppClassLoader@73d16e93, see the next exception for details.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
    at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
    at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at …
Run Code Online (Sandbox Code Playgroud)

hibernate derby embedded-database spring-orm java-8

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

Collectors.toList() 返回的收集器类型

我对 Collectors.toList() 和 Collectors.toSet() 静态方法很困惑。这两种方法不接受任何参数。那么他们怎么知道要返回什么类型的 Collector 呢?

例如,如果我们有这一行:

Collectors.toList();
Run Code Online (Sandbox Code Playgroud)

返回的收集器是Collector<Object,?,List<Object>>

如果我们有这一行:

Collector<Integer,?,List<Integer>> c = Collectors.toList();
Run Code Online (Sandbox Code Playgroud)

然后 Collectors.toList() 将返回一个Collector<Integer,?,List<Integer>>. 在不接受任何输入参数的情况下, toList() 方法如何知道它需要返回一个Collector<Integer,?,List<Integer>>?

也许如何编写 toList() 的示例代码对我的理解会有所帮助。

提前致谢。

java java-8

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

使用 Java8 Stream 翻转 HashMap 中的键、值

我有Map以下结构,我想翻转键和值。

Map<String, List<String>> dataMap
Run Code Online (Sandbox Code Playgroud)

样本数据 :

acct01: [aa, ab, ad],
acct02: [ac, ad]
acct03: [ax, ab]
Run Code Online (Sandbox Code Playgroud)

想要将这些数据转换为,

aa: [acct01],
ab: [acct01, acct03],
ac: [acct02],
ad: [acct01, acct02],
ax: [acct03]
Run Code Online (Sandbox Code Playgroud)

想知道有没有java 8-stream的方式来转换Map。

我当前的实现(没有流)

Map<String, List<String>> originalData = new HashMap<String, List<String>>();
        originalData.put("Acct01", Arrays.asList("aa", "ab", "ad"));
        originalData.put("Acct02", Arrays.asList("ac", "ad"));
        originalData.put("Acct03", Arrays.asList("ax", "ab"));

        System.out.println(originalData);
        Map<String, List<String>> newData = new HashMap<String, List<String>>();
        originalData.entrySet().forEach(entry -> {
            entry.getValue().forEach(v -> {
                if(newData.get(v) == null) {
                    List<String> t = new ArrayList<String>();
                    t.add(entry.getKey());
                    newData.put(v, t);
                } else { …
Run Code Online (Sandbox Code Playgroud)

java-8 java-stream

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

Java 8:如何从流中获取索引处的元素

我有一个流,我需要在这个流的索引处获取元素 list.get(index)

java java-8 java-stream

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

Java 8 流减少映射

我有一个包含多个条目的 LinkedHashMap。我想在第一步中将多个条目减少为单个条目,然后将其映射到单个字符串。例如:我从这样的地图开始:

{"<a>"="</a>", "<b>"="</b>", "<c>"="</c>", "<d>"="</d>"}
Run Code Online (Sandbox Code Playgroud)

最后我想得到一个这样的字符串:

<a><b><c><d></d></c></b></a>
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,字符串按顺序包含键,而不是按相反顺序包含值。但这并不重要,我想要一个通用的解决方案)

我想我需要map.entrySet().stream().reduce(),但是我不知道在reduce方法中写什么,以及如何继续。

java-8 java-stream

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

混淆 java 泛型错误与 Map 和 Collector

不久前,我发现了以下有关使用 Java 8 初始化地图的更简洁方法的信息:http : //minborgsjavapot.blogspot.com/2014/12/java-8-initializing-maps-in-smartest-way.html

使用这些指南,我在一个应用程序中实现了以下类:

public class MapUtils {
    public static <K, V> Map.Entry<K, V> entry(K key, V value) {
        return new AbstractMap.SimpleEntry<>(key, value);
    }

    public static <K, U> Collector<Map.Entry<K, U>, ?, Map<K, U>> entriesToMap() {
        return Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue());
    }

    public static <K, U> Collector<Map.Entry<K, U>, ?, ConcurrentMap<K, U>> entriesToConcurrentMap() {
        return Collectors.toConcurrentMap((e) -> e.getKey(), (e) -> e.getValue());
    }
}
Run Code Online (Sandbox Code Playgroud)

在那个应用程序中,我实现了这样的代码:

public Map<String, ServiceConfig>   serviceConfigs() {
    return Collections.unmodifiableMap(Stream.of(
            entry("ActivateSubscriber", new ServiceConfig().yellowThreshold(90).redThreshold(80)),
            entry("AddAccount", …
Run Code Online (Sandbox Code Playgroud)

java eclipse generics java-8 java-stream

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

根据索引 id 的 ArrayList 过滤 JavaRDD

我有数据集 df,其内容的索引为 accountid,我也有带 accountid 的数组列表。如何过滤或映射数据集以创建仅包含基于数组列表中的 accountid 内容的新数据集。

我正在使用 Java 8

List<String> accountIdList= new ArrayList<String>();
accountIdList.add("1001");
accountIdList.add("1002");
accountIdList.add("1003");
accountIdList.add("1004");
Dataset<Row> filteredRows=  df.filter(p-> df.col("accountId").equals(accountIdList));
Run Code Online (Sandbox Code Playgroud)

我正在尝试将列表本身传递给比较运算符,您认为这是正确的方法吗

Java 语法是

如果您正在寻找 java 语法

Dataset<Row> filteredRows=  df.where(df.col("accountId").isin(accountIdList.toArray()));
Run Code Online (Sandbox Code Playgroud)

java-8 apache-spark apache-spark-dataset

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

Jersey:在不使用 web.xml 文件的情况下为 OPTIONS 请求禁用自动 Wadl 生成?

我想完成与这个问题相同的事情:Disable automatic Wadl Generation for OPTIONS request,但我们没有web.xml文件。我们还使用ResourceConfig,getProperties方法是最终的,所以我不能像其他问题中建议的那样覆盖它。我试过property("com.sun.jersey.config.feature.DisableWADL", "true");在我们的班级中调用extends ResourceConfig,但这没有用。

如何禁用 WADL?

我们使用的是 Jersey 2.25.1。我尝试阅读WADL 上的 Jersey 文档,但由于弹出错误消息说明了有关 syntaxhighlightingerror/xml 刷子的内容,因此无法阅读该页面。

glassfish jersey java-8 jakarta-ee

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

如何删除或停用侦听器

因此,我的设置方式是,在特定条件下,我希望侦听器处于活动状态,并且在触发后,停止侦听更改。也许我遗漏了一些东西,但我似乎无法弄清楚如何使用该removeListener()功能,或者这是否是这样做的方法。

一些代码:

        break1.setOnAction(e ->{
        final String fieldValue = manage_money.getText();
        int pp = Integer.parseInt(platinum_num.getText());
        int gp = Integer.parseInt(gold_num.getText());
        int sp = Integer.parseInt(silver_num.getText());
        int cp = Integer.parseInt(copper_num.getText());
        if (fieldValue != null && fieldValue.matches("\\d+")) {
            int value = Integer.parseInt(manage_money.getText());
            if (silver.isSelected()){
                if (value <= sp){
                    try {
                        tooltip_inv.getChildren().addAll(select);
                        radio_money2.selectedToggleProperty().addListener(((observable, oldValue, newValue) -> {
                            if (newValue == copper){
                                silver_num.setText(Integer.toString(sp - value));
                                copper_num.setText(Integer.toString(cp + value * 10));
                                manage_money.clear();
                                tooltip_inv.getChildren().clear();
                            }
                        }));
                    } catch (IllegalArgumentException ex) {
                    }
                }else{
                    manage_money.setText("ERR");
                }
            }
        }else{
            manage_money.setText("NaN"); …
Run Code Online (Sandbox Code Playgroud)

java javafx listener java-8

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