这个问题涉及基本相同代码的2种不同实现.
首先,使用委托创建一个比较方法,该方法可以在排序对象集合时用作参数:
class Foo
{
public static Comparison<Foo> BarComparison = delegate(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
};
}
Run Code Online (Sandbox Code Playgroud)
当我想要一种以与CompareTo函数提供的方式不同的方式对Foo对象的集合进行排序时,我使用上述方法.例如:
List<Foo> fooList = new List<Foo>();
fooList.Sort(BarComparison);
Run Code Online (Sandbox Code Playgroud)
二,使用IComparer:
public class BarComparer : IComparer<Foo>
{
public int Compare(Foo foo1, Foo foo2)
{
return foo1.Bar.CompareTo(foo2.Bar);
}
}
Run Code Online (Sandbox Code Playgroud)
当我想在Foo对象的集合中对Foo对象进行二进制搜索时,我使用上面的代码.例如:
BarComparer comparer = new BarComparer();
List<Foo> fooList = new List<Foo>();
Foo foo = new Foo();
int index = fooList.BinarySearch(foo, comparer);
Run Code Online (Sandbox Code Playgroud)
我的问题是:
对于这个问题,我们希望避免编写特殊查询,因为查询必须在多个数据库之间不同.仅使用休眠标准,我们希望能够转义特殊字符.
这种情况是需要能够转义特殊字符的原因:
假设我们在数据库中有表'foo'.表'foo'只包含1个字段,称为'name'."名称"字段可以包含在数据库中可能被视为特殊的字符.这种名称的两个例子是'name_1'和'name%1'."_"和"%"都是特殊字符,至少在Oracle中是这样.如果用户想要在数据库中输入这些示例之后搜索其中一个示例,则可能会出现问题.
criterion = Restrictions.ilike("name", searchValue, MatchMode.ANYWHERE);
return findByCriteria(null, criterion);
Run Code Online (Sandbox Code Playgroud)
在此代码中,'searchValue'是用户为应用程序提供的用于搜索的值.如果用户想要搜索'%',则将返回用户数据库中的每个'foo'条目.这是因为'%'字符表示字符串匹配的"任意数量的字符"通配符,而hibernate生成的SQL代码将如下所示:
select * from foo where name like '%'
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉hibernate逃避某些字符,或创建一个非数据库类型特定的解决方法?
我想在c#中使用python的一些功能,如Tuples和Sets.我应该实施它们吗?还是已经实施了?任何人都可以知道.net语言的动态数据结构库吗?
在Java中使用可调整大小的数组的最佳方法是什么?我尝试使用Vector,但是当你进行插入时,它会移动所有元素,我需要一个可以增长但元素保持不变的数组.我确信这有一个简单的答案,但我仍然不太确定.
我不小心删除了一些我宁愿保留的工作版本.我从备份恢复了磁盘上的构建,但是当我处于该作业的状态页面时,它们仍然不会显示.
我已经尝试过触发另一个构建工作并重新启动Hudson.
如何完全恢复这些构建?是否存在Hudson用于存储此类信息的数据库?
我有一些涉及Parallel for循环和添加到List的问题.问题是,相同的代码可能在不同的时间生成不同的输出.我在下面设置了一些测试代码.在这段代码中,我创建了一个包含10,000个int值的List.1/10的值将为0,1/10的值将为1,一直到值的十分之一为9.
设置此List后,我设置了一个Parallel for循环,遍历列表.如果当前数字为0,我将一个值添加到新列表中.Parallel for循环完成后,我输出列表的大小.大小应始终为1,000.大多数时候,给出了正确的答案.但是,我发现有3种可能的错误结果:
doubleList.Add(0.0);doubleList.Add(0.0);给出ArgumentException的消息是: Destination array was not long enough. Check destIndex and length, and the array's lower bounds.
可能导致错误的原因是什么?这是一个.Net错误吗?有什么我可以做的,以防止这种情况发生?
请亲自试用代码.如果您没有收到错误,请尝试几次.另请注意,使用单核机器时可能不会发现任何错误.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ParallelTest
{
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>();
List<double> doubleList = new List<double>();
for (int i = 0; i < 250; i++)
{
intList.Clear();
doubleList.Clear();
for (int j = 0; j < 10000; j++) …Run Code Online (Sandbox Code Playgroud) 你如何在不同类型的jsp中正确呈现对象列表?比如说,我必须以指定的顺序渲染这些不同的对象.
一种方法可能是使用公共类型变量或instanceof,但这意味着有一个大的switch/if语句来管理它们:
<c:forEach var="o" items="${bigListofObjects}" >
<c:choose>
<c:when test='${o.type=="simple"}' >
<!-- render simple -->
</c:when>
<c:when test='${o.type=="complex"}' >
<!-- render complex -->
</c:when>
<!-- etc etc ... -->
</c:choose>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
我可以为每个类添加一个render()方法,但这意味着将视图与其余代码混合.
如果我想稍后渲染另一种类型会发生什么?我可以用自定义jsp标签做些什么吗?
如果一次插入一个对象,则可以从该对象中获取 Id:
foreach (var object in objectList)
{
conn.Insert(object);
int id = object.Id; // Returns Id as expected
}
Run Code Online (Sandbox Code Playgroud)
但是,如果插入 IEnumerable 对象,则无法正确获取 Id:
conn.Insert(objectList);
foreach (var object in objectList)
{
int id = object.Id; // Returning 0
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以插入对象列表并仍然获取 Id,而无需一次插入 1 个?
使用Java 6:
我有一个方法,使用线程在后台运行任务.此任务访问文件,因此该方法不应该有多个线程在运行.
我试图弄清楚是否有一种方法可以在我的方法开头搜索活动的线程.我想知道是否有一个活动的线程已经在运行我的任务,以便我可以正确处理这种情况.
如果没有先前Thread的实际实例,这是否可行?我想避免全局保存线程的实例.
我需要从ac#application执行一个非常大的sql server插件.在20,000到50,000记录范围内的某个地方.
通过SQL Server执行插入的最快方法是什么?
我知道有几个选项,但我不知道哪个是最快的.
insert into MyTable(column1, column2, ..., column*)
select 'value','value',...,'value'
union
select 'value','value',...,'value'
Run Code Online (Sandbox Code Playgroud)
要么
insert into MyTable(column1, column2, ..., column*)
exec('select ''value'',''value'',...,''value'''
'select ''value'',''value'',...,''value''')
Run Code Online (Sandbox Code Playgroud)
要么
bulk insert from a data file
Run Code Online (Sandbox Code Playgroud)
要么
Any better way that you know of :)
Run Code Online (Sandbox Code Playgroud)