我有一个服务下面的方法,请注意.user就def usersByRole行:
def getUsersByRole(String desiredRole1, String desiredRole2, String desiredRole3) {
    Role role1 = Role.findByAuthority(desiredRole1)
    Role role2 = Role.findByAuthority(desiredRole2)
    Role role3 = Role.findByAuthority(desiredRole3)
    def usersByRole = UserRole.findAllByRoleInList([role1, role2, role3]).user
    return usersByRole
}  
它运行良好,但是当用户具有多个角色(即ROLE_ADMIN,和ROLE_OWNER)时,如果前面提到的两个角色都作为参数给出,则该用户在集合中存在两次.有什么干净的方法我可以使集合只包含独特的结果?
当使用Groovy的eachWithIndex方法时,索引值从0开始,我需要从1开始.我该怎么做?
我不明白这个for循环的终止参数.这是什么意思?具体来说,做什么?,- >,和:0表示?
for( i = 0; i < (sequence ? sequence->total : 0); i++ )
我刚刚开始阅读C语言编程,我无法理解一个部分.以下是第24页的摘录:
Run Code Online (Sandbox Code Playgroud)#include<stdio.h> /*countdigits,whitespace,others*/ main() { intc,i,nwhite,nother; intndigit[10]; nwhite=nother=0; for(i=0;i<10;++i) ndigit[i]=0; while((c=getchar())!=EOF) if(c>='0'&&c<='9') ++ndigit[c-'0']; //THIS IS THE LINE I AM WONDERING ABOUT else if(c==''||c=='\n'||c=='\t') ++nwhite; else ++nother; printf("digits="); for(i=0;i<10;++i) printf("%d",ndigit[i]); printf(",whitespace=%d,other=%d\n", nwhite,nother); }该程序的输出本身就是
Run Code Online (Sandbox Code Playgroud)digits=9300000001,whitespace=123,other=345声明
Run Code Online (Sandbox Code Playgroud)intndigit[10];将ndigit声明为10个整数的数组.数组下标总是从C开始为零,因此元素是
Run Code Online (Sandbox Code Playgroud)ndigit[0], ndigit[ 1], ..., ndigit[9]这反映在初始化和打印数组的for循环中.下标可以是任何整数表达式,包括整数变量,如i和整数常量.此特定程序依赖于数字的字符表示的属性.例如,测试
Run Code Online (Sandbox Code Playgroud)if(c>='0'&&c<='9')确定c中的字符是否为数字.如果是,则该数字的数值为
Run Code Online (Sandbox Code Playgroud)c-'0'`仅当'0','1',...,'9'具有连续增加的值时,这才有效.幸运的是,对于所有字符集都是如此.根据定义,字符只是小整数,因此char变量和常量与算术表达式中的int相同.这很自然方便; 例如
Run Code Online (Sandbox Code Playgroud)c-'0'是一个整数表达式,其值介于0和9之间,对应于存储在c中的字符"0"到"9",因此是数组ndigit的有效下标.
我无法理解的-'0'部分是为什么表达部分是必要的c-'0'.如果一个字符是作者所说的小整数,并且数字字符对应于它们的数值,那么正在-'0'做什么?
我有一个名为的类Address,它有一个名为的布尔字段clone.我试图使用Grails list()方法来显示Address类的实例clone = false.我虽然可以使用fetch参数来完成此操作,但它没有按预期工作.而不是仅返回我想要的地址,而是返回Address该类的所有实例.这是我有的:
def list = {
    params.max = Math.min(params.max ? params.int('max') : 10, 100)
    params.fetch = [clone:false]
    [addressInstanceList: Address.list(params), addressInstanceTotal: Address.count()]
}
即使我做它真的很简单,提取仍然无法按预期工作.例如,如果我指定我只想Address用邮政编码"90210" 获取该类的实例,我写了这个,但它仍然给了我所有Address类的实例.
Address.list(fetch:[zip:"90210"])
我究竟做错了什么?
我有一个我这样创建的Double:
Double d = Double.parseDouble( "27.86753" ); // All the digits of this double value are 27.867530822753906
这个特殊的double也可以用float表示,所以Java会删除其余的数字.我如何强制Java给我这个值的真正双重表示(所有数字)?
我有以下FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="600.0" prefWidth="1000.0" stylesheets="@../css/fxmlDemo.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxmldemo.controller.MainController">
    <children>
        <TreeTableView fx:id="treeTableView" prefHeight="600.0" prefWidth="1000.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" xmlns:fx="http://javafx.com/fxml">
            <columns>
                <TreeTableColumn fx:id="nameColumn" prefWidth="600.0" text="Name" />
                <TreeTableColumn fx:id="sizeColumn" prefWidth="100.0" text="Size" />
                <TreeTableColumn fx:id="lastModifiedColumn" prefWidth="300.0" text="Modified" />
            </columns>
        </TreeTableView>
    </children>
</AnchorPane>
在我的fxmlDemo.css文件中,我尝试过以下方法:
* { 
  -fx-border-style: solid;
}
和
tree-table-view { 
  -fx-border-style: solid;
}
和
tree-item { 
  -fx-border-style: solid;
}
第一个在FXML中围绕一切边界,另外两个什么都不做.
我想要的是显示网格线像Excel电子表格.我正在使用的代码与此示例中看到的代码非常相似,但我的代码已被修改为实际工作:)
以下是Java FX CSS参考指南的链接,但它不包含有关TreeTableView或其子组件的信息.
我有一个应用程序,它启动时加载文件.加载文件时,会初始化一些枚举.getTagGroupStartId当枚举被初始化时调用该方法.该方法采用"标记"的名称,该标记可能存在或可能不存在于加载的文件中.如果它不存在则getTagGroupStartId返回-1.
所有这一切都很好.当我加载另一个可能包含前一个文件不包含的"标记"的文件或者可能不包含前一个文件包含的"标记"时,会出现问题.在这两种情况下,我都需要更新枚举中的m_tagId值,以便枚举反映当前文件的值.如何重新加载/重新初始化枚举?
public enum ExampleEnum {
    FOO("FOO_"),
    BAR("BAR_"),
    BAZ("BAZ_");
    private final String m_tagName;
    private final int m_tagId;
    ExampleEnum(String tagName) {
        m_tagName = tagName;
        m_tagId = Tag.getTagGroupStartId(tagName);
    }
    // ...
}
我总是听说Java是开源的,这是一个很大的好处,但是我没有看到Java是开源的应该让我使用它而不是封闭源的.NET. 这个网站有一些问答部分(特别是这些发展对行业有什么意义)给出了一些信息,但是Java是开源的唯一(或最大)优势?
由于我是初学者,有没有任何专业人士发现自改变以来有什么重大差异?
编辑:
请忽略这个问题的.NET部分,我只是将它用作比较. 我真正关心的是了解Java开源的好处.
首先是一点背景.我在NetBeans中收到警告告诉我不要在构造函数中启动新线程.我已经读过它的原因是因为新线程可能会启动并尝试在构造函数实际完成对象之前引用启动线程的对象.
1.)为了实验而不是使用new Thread和thread.start()我试过ExecutorService,我没有得到任何警告.  这是否意味着如果我使用的话,可以在构造函数中创建和启动新线程ExecutorService?
2.)另外,如果我有ExecutorService一个缓存线程池的形式将通过标准方法创建一个新线程new Thread并thread.start()从缓存池中拉出一个线程(或者如果一个线程不可用则导致它创建一个)或者这些线程是否完全独立于缓存的线程池?
该计划正在努力实现的目标:
该程序应该同步"访客"和"汽车"的几个线程.游客们随意漫步,直到他们决定乘车.如果他们是第一次乘坐汽车并且有车可以乘坐,那么他们必须等到他们第一次排队或者车回来.如果没有排队的游客,车辆会等待,直到游客想要乘车.
更多背景信息:
我重拍使用条件变量作为接受的答案建议我的线程同步程序在这里.我知道我在正确的轨道上,但由于某些原因,我的程序仍然陷入僵局,对于我的生活,我无法弄清楚为什么.除非我给你代码,否则我不知道你怎么能帮助我,所以这里是:
问题:
1.)一小段后死锁
2.)有时候一位游客首先排队买车,但从不上车.
解决方案:
我的代码中有太多的错误......我认为,因为我会修复一个,我经常(不经意间)引入另一个.我一直在删除程序的功能,直到我消除了所有的错误,然后以一种不会使我的程序死锁的方式逐个构建功能.谢谢大家的建议.
以下代码行在我的一个if陈述中:
$("#dateOfTransaction_month").val() != "${loadInstance?.payment?.dateOfTransaction?.getAt(Calendar.MONTH) + 1}"
由于Java的日期/时间管理是如此混乱,我必须编写+ 1以获得正确的月份.问题是有时候一个payment物体可能不存在,所以我基本上会说null + 1.这给了我错误Cannot invoke method plus() on null object.有没有任何简洁的方法(整洁的东西像Groovy的安全导航操作符)我可以解释一个payment对象在if语句中为空的可能性,或者我被迫在if语句之前检查值是否为空?
java ×5
groovy ×4
grails ×3
c ×2
grails-orm ×2
.net ×1
c++ ×1
classloader ×1
closures ×1
deadlock ×1
double ×1
enums ×1
for-loop ×1
fxml ×1
java-8 ×1
javafx-8 ×1
loops ×1
open-source ×1
pthreads ×1
threadpool ×1