有多种方法可以生成电子邮件地址字符串,这些字符串与直接字符串比较(见下文)不同,但在逻辑上是等效的(即发送到两者的邮件都转到同一个邮箱).这通常允许用户提供看似独特的电子邮件地址,即使不允许严格的平等.
我希望找到一个试图进行规范化的库,以便从大量的电子邮件地址中找到一些重复项.这里的目标是找到尽可能多的重复项.鉴于这对于多种用途有多大用处(在我的情况下,它是简单的滥用检测,因为滥用帐户倾向于(尝试)只重用某些帐户),我认为可能存在现有的解决方案.
那么什么样的东西可以变化?我至少知道这样的事情:
理想情况下,这将是Java,虽然脚本语言也可以工作(命令行工具)
我对java.util.zip图书馆有一些一般性的问题.我们基本上做的是导入和导出许多小组件.以前,这些组件是使用单个大文件导入和导出的,例如:
<component-type-a id="1"/>
<component-type-a id="2"/>
<component-type-a id="N"/>
<component-type-b id="1"/>
<component-type-b id="2"/>
<component-type-b id="N"/>
Run Code Online (Sandbox Code Playgroud)
请注意,导入期间组件的顺序是相关的.
现在每个组件都应该占用自己的文件,该文件应该是外部版本的,QA-ed,bla,bla.我们决定导出的输出应该是一个zip文件(包含所有这些文件),我们导入的输入应该是一个类似的zip文件.我们不想在我们的系统中爆炸zip.我们不希望为每个小文件打开单独的流.我目前的问题:
Q1.可以ZipInputStream保证zip条目(小文件)的读取顺序与我们使用的导出插入的顺序相同ZipOutputStream吗?我认为阅读是这样的:
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null)
{
//read from zis until available
}
Run Code Online (Sandbox Code Playgroud)
我知道中央zip目录放在zip文件的末尾但是内部的文件条目有顺序.我也知道依靠订单是一个丑陋的想法,但我只想记住所有的事实.
Q2.如果我使用ZipFile(我更喜欢),呼叫getInputStream()数百次会对性能产生什么影响?它会比ZipInputStream解决方案慢得多吗?拉链只打开一次ZipFile并由后备RandomAccessFile- 这是正确的吗?我认为阅读是这样的:
ZipFile zipfile = new ZipFile(argv[0]);
Enumeration e = zipfile.entries();//TODO: assure the order of the entries
while(e.hasMoreElements()) {
entry = (ZipEntry) e.nextElement();
is = …Run Code Online (Sandbox Code Playgroud) 嗨,我听说过lzo和lzf,似乎它们都是压缩算法.它们是一样的吗?有没有像他们一样的其他算法(光和快)?
我有兴趣在Java中使用仿函数(函数对象).通过快速谷歌搜索我发现这3个包:
而且,JGA似乎可能拥有最好的设计.但我怀疑其他人实际使用过一个或多个软件包可能能够提供更多关于这些(也许是其他)函子包的优缺点的见解.
我们正在使用JaxRS和Jackson向我们的客户发送数据.由于客户端是Javascript,如果没有该属性的有效值(默认情况下JaxRS默认),我们实际上不需要发送空值或空数组.有没有解决的办法?
一个例子.JaxRS发送此信息:
{"prop1":[],"prop2":null,"prop3":"foo"}
我们可以在哪里得到
{"prop3":"foo"}
我正在用JSON编写一个iphone应用程序,并试图将JSON字符串转换为对象(NOT Dictionaries或Arrays).
在Java中,感谢Reflection,我可以轻松地将JSON转换为javabean实例,如下所示:
import net.sf.json.JSONObject;
class MyBean {
private String property;
public String getProperty() { return property; }
public void setProperty(String property) { this.property=property; }
}
// turn JSON string into a MyBean instance
String str = "{\"property\":\"some value\"}";
JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON( str );
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setRootClass( MyBean.class );
MyBean instance = (MyBean) JSONSerializer.toJava( jsonObject, jsonConfig );
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可能在objective-c中.我目前正在使用此 JSON框架,但如果有必要,我愿意切换.
谢谢,
我有一个商店列表,需要添加注释.这些注释需要有一个ID,以便可以编辑和删除它们 - 这适用于web应用,其中id参数将包含用于标识对象的字符串.我对MongoDB并不太熟悉,但是认为在地图中使用ObjectId作为关键字,这将是一个简单的解决方案.如果有更好的方法在MongoDB中执行此操作,请更正我.
无论如何,当我尝试使用(new ObjectId())作为键时,我在shell中得到"无效的属性id"错误.
db.locations.update({_id: 'store1'}, {$set: {'notes': {(new ObjectId()): 'note1'}}})
Run Code Online (Sandbox Code Playgroud)
我做错了什么想法?
为"不可变对象"创建类时,不可变意味着无法更改实例状态; 用Java(和类似语言)在构造函数中分配的所有字段,有时仍然允许创建修改后的实例.也就是说,使用实例作为基础,并创建一个仅由一个属性值不同的新实例; 来自基本实例的其他值.举一个简单的例子,可以有类:
public class Circle {
final double x, y; // location
final double radius;
public Circle(double x, double y, double r) {
this.x = x;
this.y = y;
this.r = r;
}
// method for creating a new instance, moved in x-axis by specified amount
public Circle withOffset(double deltaX) {
return new Circle(x+deltaX, y, radius);
}
}
Run Code Online (Sandbox Code Playgroud)
那么:应该调用什么方法"withOffset"?(注意:不应该是它的名字 - 但是这类方法叫做什么).从技术上讲,它是一种工厂方法,但对我来说似乎不太合适,因为工厂通常只给出基本属性(并且是静态方法,或者不是结果类型的成员,而是工厂类型).
所以我猜这些方法应该有一个更好的术语.既然这些方法可以用来实现" 流畅的界面 ",那么它们可能是"流利的工厂方法"吗?更好的建议?
编辑:正如其中一个答案所示,java.math.BigDecimal是一个很好的例子,它的'添加','减去'(等)方法.
另外:我注意到这个问题(Jon Skeet并没有减少)有点相关(虽然它询问方法的具体名称)
编辑,2014年5月:我目前最喜欢的是mutant factory,FWIW.
我一直在尝试读取csv并将字段添加到数据结构中。但是,其中一行的格式不正确,我知道这一点。我只想跳过这一行,然后转到另一行。但是,即使我捕获到异常,它仍在中断循环。知道我在这里缺少什么吗?
我的csv:
"id","name","email"
121212,"Steve","steve@example.com"
121212,"Steve","steve2@example.com",,
121212,"Steve","steve@example.com"
Run Code Online (Sandbox Code Playgroud)
我的代码:
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
public static void main(String[] args) throws Exception{
Path path = Paths.get("list2.csv");
CsvMapper mapper = new CsvMapper();
CsvSchema schema = CsvSchema.emptySchema().withHeader();
MappingIterator<Object> it = mapper.reader(Object.class)
.with(schema)
.readValues(path.toFile());
try{
while(it.hasNext()){
Object row;
try{
row = it.nextValue();
} catch (IOException e){
e.printStackTrace();
continue;
}
}
} catch (ArrayIndexOutOfBoundsException e){
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
com.fasterxml.jackson.core.JsonParseException: Too many entries: expected at most 3 (value #3 (0 chars) "")
at [Source: java.io.InputStreamReader@12b3519c; line: …Run Code Online (Sandbox Code Playgroud) 看起来GAE选择了JDK 1.6类的子集,如下所示:
这是非常不幸的,因为人们会在最常见的java库中获得类链接错误,这些java库处理数据绑定,反射,类加载和注释.虽然有些遗漏可能是针对已弃用或遗留的东西,但还有一些遗漏不是.我特别关注的是流式拉解析器(javax.xml.stream.*),它经过长时间的延迟(API与JDK 1.4大致同时完成)后刚刚添加到JDK 1.6中.省略这一点使得进行可扩展的高性能xml处理变得更加困难.
我理解的问题是,不仅缺少类,而且由于安全性限制,甚至无法添加它们.
所以:这是一个开放式的哲学问题,可能只是GAE开发人员可以肯定回答但是......为什么有些API从标准的JDK 1.6中掉线,看似随意?
更新:
快速说明:感谢您的回答.对于它的价值我真的不知道安全性与不包括javax.xml.stream有什么关系.安全方面与许多其他事情相关(例如,我不需要线程,并且可以看出它们为什么会出局),所以这是可以理解的样板答案; 只是不适用于这个.
Stax API只是一组接口和摘要,用于大声喊叫.但更重要的是,它与SAX,DOM和JAXP接口具有完全相同的分支 - 已经包括在内!
但看起来这个问题已引起谷歌开发者的关注:
所以这里希望能够迅速解决这个问题和类似问题.
java ×6
jackson ×2
json ×2
algorithm ×1
cocoa ×1
compression ×1
csv ×1
email ×1
functor ×1
immutability ×1
io ×1
iphone ×1
jax-rs ×1
jdk1.6 ×1
lzf ×1
lzo ×1
mongodb ×1
objective-c ×1
oop ×1
reflection ×1
stax ×1
terminology ×1
zip ×1