如何将多个谓词应用于java.util.Stream's filter()方法?
这就是我现在所做的,但我并不喜欢它.我有一些Collection东西,我需要根据Collection过滤器(谓词)减少事物的数量:
Collection<Thing> things = someGenerator.someMethod();
List<Thing> filtered = things.parallelStream().filter(p -> {
for (Filter f : filtersCollection) {
if (f.test(p))
return true;
}
return false;
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我知道如果我事先了解过滤器的数量,我可以这样做:
List<Thing> filtered = things.parallelStream().filter(filter1).or(filter2).or(filter3)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但是如何在不混合编程风格的情况下应用未知数量的谓词?知道它看起来有点难看......
使用DateFormat的实例格式化和解析Java Date(或Calendar)类非常容易,即我可以将当前日期格式化为短的本地化日期,如下所示:
DateFormat formatter = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
String today = formatter.format(new Date());
Run Code Online (Sandbox Code Playgroud)
我的问题是:我需要获得这个本地化的模式字符串(即类似的东西"MM/dd/yy").这应该是一项微不足道的任务,但我找不到提供者......
我一直在研究我的第一个MVC应用程序,我想将它本地化.我知道如何使用App_GlobalResources,但我更喜欢使用App_LocalResources.
在典型的WebForms应用程序中,您将App_LocalResources文件夹放在与ASPX文件相同的目录中...这在MVC中是相同的(IE:我将它们放在"views"目录中的相应子文件夹中)吗?
此外,在视图中访问App_GlobalResources时,您可以这样做,<%=Html.Encode(Resources.Index.Title)%>但是我无法使用App_LocalResources执行此操作.我不想让我<label runat="server"为了利用这个meta:resourcekey
编辑:
我发现了一种方法来做到这一点,但我不确定这是否是最好的方法.这是个主意
App_LocalResources文件夹作为子文件夹放在相应的View文件夹中Index.resx或About.resx现在我可以使用类似的东西来引用本地资源
<%= MyProj.Views.Home.Index.Title%>
我看到的唯一问题是资源是嵌入的,我无法在不重新编译项目的情况下添加新的语言环境.
有没有办法让message.properties记录如下
message.myMessage=This message is for ${name} in ${location}
Run Code Online (Sandbox Code Playgroud)
而不是
message.myMessage = This message is for {0} in {1}
Run Code Online (Sandbox Code Playgroud)
当我创建消息时,我不一定知道顺序/需要多少参数,但我只能按名称传递几个属性,并且只使用正确的属性.
我们都知道使用String的equals()方法进行相等比较会失败.相反,应该使用Collator,如下所示:
// we need to detect User Interface locale somehow
Locale uiLocale = Locale.forLanguageTag("da-DK");
// Setting up collator object
Collator collator = Collator.getInstance(uiLocale);
collator.setStrength(Collator.SECONDARY);
collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
// strings for equality testing
String test1 = "USA lover Grækenland støtte";
String test2 = "USA lover graekenland støtte";
boolean result = collator.equals(test1, test2);
Run Code Online (Sandbox Code Playgroud)
现在,这段代码有效,除非 uiLocale设置为丹麦语,否则结果为真.在这种情况下,它会产生错误.我当然明白为什么会发生这种情况:这只是因为方法equals是这样实现的:
return compare(s1, s2) == Collator.Equal;
Run Code Online (Sandbox Code Playgroud)
此方法调用用于排序的方法并检查字符串是否相同.它们不是,因为丹麦特定的整理规则要求æ后排序(如果我正确理解比较方法的结果)ae.但是,这些字符串实际上是相同的,具有这种强度的情况差异和这样的兼容性字符(这就是它所谓的)应该被视为相等.
要解决这个问题,可以使用RuleBasedCollator和一组适用于相等情况的特定规则.
最后问题是:有没有人知道我在哪里可以得到这样的特定规则(不仅对丹麦语而且对其他语言也是如此),因此兼容性字符,连字等被视为相等(CLDR 图表似乎不包含这样或者我找不到它)?
或者也许我想在这里做一些愚蠢的事情,我应该使用简单的UCA进行相等比较(请问任何代码示例)?
我的代码如下:
String s = "";
for (My my : myList) {
s += my.getX();
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,Findbugs总是会报错.
另一个简单问题.我有不同语言的网站.如果我想从资源文件中访问一个字符串,我会像这样使用它
Resources.MyResourceFile.MyStringIdentifier
Run Code Online (Sandbox Code Playgroud)
很容易.这样我在编译期间就知道资源字符串存在.
现在,只有当我想使用当前的文化时,这才有效.有时我需要指定一种特定的文化(假设当前用户使用德语作为语言,但他的操作会触发将消息发送给其他用户,这些用户将使用收件人的语言).现在,我看到两个选择:
Resources.MyResourceFile.ResourceManager.GetString("MyStringIdentifier", neededCulturInfo)
Run Code Online (Sandbox Code Playgroud)
另一个是改变当前线程的文化信息,我需要做几次.
还有第三种方式吗?在编译时告诉我资源存在但不需要一直改变线程文化的东西?
asp.net resources cultureinfo internationalization currentuiculture
我有一个问题,在编写C#代码时,输出有时是单词阿拉伯语,它看起来像一个奇怪的符号,如何让C#读取并显示阿拉伯语?
我有一个Android应用程序,根据Android设备的分辨率动态缩放文本.我已经在Android模拟器中的所有预定义分辨率上测试了此代码,我的代码运行正常.(这包括与HTC Desire和Motorola Droid相同的分辨率)
它也适用于我的HTC Wildfire.
以下是模拟器的一些屏幕截图:

但是......我在HTC Desire上尝试了这个,我收到了使用Motorola Droid的用户报告,这些字体没有正确缩放:

请注意它是如何切断文本的.
任何想法为什么这不适用于这些特定的设备?
我目前有一个函数可以根据文本的可用高度缩小文本...这样的事情:
public static float calculateHeight(FontMetrics fm) {
return Math.abs(fm.ascent) + fm.descent;
}
public static int determineTextSize(Typeface font, float allowableHeight) {
Paint p = new Paint();
p.setTypeface(font);
int size = (int) allowableHeight;
p.setTextSize(size);
float currentHeight = calculateHeight(p.getFontMetrics());
while (size!=0 && (currentHeight) > allowableHeight) {
p.setTextSize(size--);
currentHeight = calculateHeight(p.getFontMetrics());
}
if (size==0) {
System.out.print("Using Allowable Height!!");
return (int) allowableHeight;
}
System.out.print("Using size " + size);
return size;
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么只在几个设备上发生这种情况?以及如何解决它?还有其他字体指标,而不是我需要考虑的,我不知道吗?像Scale还是DPI?
谢谢.
我决定使用ResourceBundles为我的php应用程序提供翻译.虽然ResourceBundle(http://www.php.net/manual/en/class.resourcebundle.php)功能很新,但我更喜欢它在gettext上的工作方式.
我的问题是有没有好的ResourceBundle编辑器?特别是我正在寻找一个将扫描我的所有源文件并生成需要翻译和/或更新的消息ID列表.
以前,我使用POEdit为gettext生成翻译文件.它能够扫描我的源文件以获取_()等函数,并向我提供要翻译的消息ID列表.
我已经尝试安装一个eclipse插件(http://sourceforge.net/projects/eclipse-rbe/),虽然它有一个很好的GUI,但它不会扫描我的源文件来生成要翻译的消息ID列表.
任何人都可以推荐任何资源包编辑器吗?
我正在申请.该应用程序使用日期格式,如
"2012-11-21 15:22:35".
我已经知道格式了"yyyy-MM-dd HH:mm:ss".但是,如何以编程方式查找任意输入字符串的日期和时间格式?有没有办法做到这一点?
java ×6
localization ×3
c# ×2
cultureinfo ×2
datetime ×2
.net ×1
android ×1
asp.net ×1
asp.net-mvc ×1
coding-style ×1
collation ×1
fontmetrics ×1
fonts ×1
icu ×1
java-8 ×1
java-stream ×1
lambda ×1
php ×1
predicate ×1
resources ×1
spring ×1
string ×1