小编Mic*_*nic的帖子

是否可以在Java AutoValue中为集合添加值?

我有一个带有List属性的Java AutoValue类.我想允许构建器附加到List而不必传递整个构造的列表.

例:

import com.google.auto.value.AutoValue;
@AutoValue
public abstract class Deck {
    public abstract List<Card> cards();
    public static Builder builder() {
        return new AutoValue_Card.Builder()
            .cards(new ArrayList<Card>());
    }
    @AutoValue.Builder
    public abstract static class Builder {
        public abstract Builder cards(List<Card> cards);
        /**
         * Append card to cards in the constructed Deck.
         */
        public Builder addCard(Card card) {
            // Is it possible to write this function?
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编写addCard函数的最佳解决方案是什么?AutoValue是否已经以某种方式支持此功能?构造类中的中间卡属性对Builder不可见,因此我无法直接访问它.我可以尝试通过在Builder中保留我自己的卡副本来直接绕过Builder,这是唯一的选择吗?

java auto-value

9
推荐指数
2
解决办法
1767
查看次数

用BigDecimal限制重要数字的任何巧妙方法

我想将Java BigDecimal舍入到一定数量的有效数字(非小数位),例如4位数:

12.3456 => 12.35

123.456 => 123.5

123456 => 123500

基本问题是如何找到BigDecimal的数量级,因此我可以决定小数点后使用的位数.

我能想到的只是一个可怕的循环,除以10直到结果<1,我希望有更好的方法.

顺便说一句,这个数字可能非常大(或非常小)所以我无法将其转换为双倍以使用登录它.

java bigdecimal

6
推荐指数
3
解决办法
7705
查看次数

检查Java中的ArrayList中是否存在Object

我有以下对象列表:

private List<Object> teamlist = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

我正在向列表中添加对象,如下所示:

teamlist.add(new MCWarTeam(args[0], joinkey));
Run Code Online (Sandbox Code Playgroud)

现在列表中的对象没有名称,但可以使用列表引用,对吧?在向列表中添加新元素之前,如何检查具有特定属性的对象是否已存在?这是Objects的构造函数:

public MCWarTeam(String teamname, String joinkey){
    this.teamname = teamname;
    this.joinkey = joinkey;
}
Run Code Online (Sandbox Code Playgroud)

我想检查是否已经有一个名为teamname的团队.或者,是否有更好的方法来存储对象?之前,我只是使用HashMap添加了teamname和joinkey,它运行得很好,但是使用Objects计算它将是一种更好的方法.

以下是事件处理程序的重要代码:

        else if (cmd.getName().equalsIgnoreCase("createTeam")) {
        if (args.length > 0 && args.length < 3) {
            String joinkey = "";
            if (args.length > 1)
                joinkey = args[1];

            String teamname = args[0];

            MCWarTeam newTeam = new MCWarTeam(teamname, joinkey);
            if (!teamlist.containsKey(teamname)) {
                teamlist.put(teamname, newTeam);
                sender.sendMessage("Created new team \"" + teamname + "\" with join key \"" + …
Run Code Online (Sandbox Code Playgroud)

java arraylist object bukkit

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

在Oracle中使用FK查询FOR UPDATE NOWAIT

我有一个表tab1 (t_id, status)和表tab2 (id, t_id, status),其中t_id.tab2有外键引用tab1.t_id.

假设一个Oracle会话S1获得SELECT FOR UPDATE NOWAIT在创纪录的锁tab1t_id=123.

NOWAITs1仍然保持锁定时tab1,另一个会话s2可以tab2tab2.t_id=123(FK)更新记录吗?

sql oracle locking oracle11g

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

标签 统计

java ×3

arraylist ×1

auto-value ×1

bigdecimal ×1

bukkit ×1

locking ×1

object ×1

oracle ×1

oracle11g ×1

sql ×1