Lambda girintisi ile elde etmek istediğim şey şudur:
Çok satırlı açıklama:
String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" };
List<String> strings = Arrays.stream(ppl)
.filter(
(x) ->
{
return x.contains("(M)");
}
).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
Tek satırlık açıklama:
List<String> strings = Arrays.stream(ppl)
.map((x) -> x.toUpperCase())
.filter((x) -> x.contains("(M)"))
.collect(Collectors.toList());
Şu anda Eclipse, aşağıdaki şekilde otomatik olarak biçimlendirmektedir:
Çok satırlı açıklama:
String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" };
List<String> strings = Arrays.stream(ppl).filter((x) ->
{
return x.contains("(M)");
}).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
Tek satırlık açıklama:
String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des(M)", "Rick (M)" };
List<String> strings = Arrays.stream(ppl).map((x) -> x.toUpperCase())
.filter((x) -> x.contains("(M)")).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
Ve bunu gerçekten karmaşık buluyorum, çünkü collect
aramanın doğrudan altında olması return
ve aralarında hiç boşluk olmaması. Lambda'yı girintili yeni bir satırda başlatmayı tercih ederim ve böylece .filter(
çağrı çağrının hemen üstünde olur .collect(
. Bununla birlikte, standart Java-8 Eclipse Formatter ile özelleştirilebilen tek şey, lambda gövdesinin başlangıcındaki ayraçtır, ancak ()
önceden parantezler veya girinti için hiçbir şey yoktur .
Ve tek hatlı aramalarda, sadece temel hat sarmayı kullanır ve bunu zincirleme bir karmaşa haline getirir. Bunun daha sonra şifresini çözmenin neden zor olduğunu açıklamama gerek olduğunu sanmıyorum.
Biçimlendirmeyi bir şekilde daha fazla özelleştirmenin ve Eclipse'de ilk biçimlendirme türünü elde etmenin bir yolu var mı? (Veya isteğe bağlı olarak IntelliJ IDEA gibi başka bir IDE'de.)
DÜZENLEME: En yakın bulabildiğim IntelliJ IDEA 13 Community Edition (okuma: ücretsiz sürüm: P) ile oldu (bu durumda 8 olan sürekli girinti ile tanımlanmıştır):
public static void main(String[] args)
{
int[] x = new int[] {1, 2, 3, 4, 5, 6, 7};
int sum = Arrays.stream(x)
.map((n) -> n * 5)
.filter((n) -> {
System.out.println("Filtering: " + n);
return n % 3 != 0;
})
.reduce(0, Integer::sum);
List<Integer> list = Arrays.stream(x)
.filter((n) -> n % 2 == 0)
.map((n) -> n * 4)
.boxed()
.collect(Collectors.toList());
list.forEach(System.out::println);
System.out.println(sum);
Ayrıca, zincirleme yöntem çağrısını şu şekilde "hizalamaya" izin verir:
int sum = Arrays.stream(x)
.map((n) -> n * 5)
.filter((n) -> {
System.out.println("Filtering: " + n);
return n % 3 != 0;
})
.reduce(0, Integer::sum);
List<Integer> list = Arrays.stream(x)
.filter((n) -> n % 2 == 0)
.map((n) -> n * 4)
.boxed()
.collect(Collectors.toList());
list.forEach(System.out::println);
System.out.println(sum);
}
Şahsen ben ikinci versiyonun daha mantıklı olmasına rağmen onu çok uzağa ittiğini görüyorum, bu yüzden ilkini tercih ediyorum.
İlk kurulumdan sorumlu kurulum şu şekildedir:
<?xml version="1.0" encoding="UTF-8"?>
<code_scheme name="Zhuinden">
<option name="JD_ALIGN_PARAM_COMMENTS" value="false" />
<option name="JD_ALIGN_EXCEPTION_COMMENTS" value="false" />
<option name="JD_ADD_BLANK_AFTER_PARM_COMMENTS" value="true" />
<option name="JD_ADD_BLANK_AFTER_RETURN" value="true" />
<option name="JD_P_AT_EMPTY_LINES" value="false" />
<option name="JD_PARAM_DESCRIPTION_ON_NEW_LINE" value="true" />
<option name="WRAP_COMMENTS" value="true" />
<codeStyleSettings language="JAVA">
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
<option name="BRACE_STYLE" value="2" />
<option name="CLASS_BRACE_STYLE" value="2" />
<option name="METHOD_BRACE_STYLE" value="2" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="WHILE_ON_NEW_LINE" value="true" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="FINALLY_ON_NEW_LINE" value="true" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="SPACE_WITHIN_BRACES" value="true" />
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_TRY_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_SYNCHRONIZED_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="THROWS_LIST_WRAP" value="1" />
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
<option name="THROWS_KEYWORD_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="2" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="ASSIGNMENT_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<option name="PARAMETER_ANNOTATION_WRAP" value="1" />
<option name="VARIABLE_ANNOTATION_WRAP" value="1" />
<option name="ENUM_CONSTANTS_WRAP" value="2" />
</codeStyleSettings>
</code_scheme>
Her şeyin mantıklı olduğundan emin olmaya çalıştım, ancak bir şeyleri mahvetmiş olabilirim, bu yüzden küçük ayarlamalara ihtiyaç olabilir.
Benim gibi bir Macarsanız ve bir Macar düzeni kullanıyorsanız, bu tuş eşlemesi sizin için yararlı olabilir, böylece AltGR + F, AltGR + G, AltGR + B'yi kullanamazsınız. , AltGR + N ve AltGR + M (Ctrl + Alt'a karşılık gelir).
<?xml version="1.0" encoding="UTF-8"?>
<keymap version="1" name="Default copy" parent="$default">
<action id="ExtractMethod">
<keyboard-shortcut first-keystroke="shift control M" />
</action>
<action id="GotoImplementation">
<mouse-shortcut keystroke="control alt button1" />
</action>
<action id="GotoLine">
<keyboard-shortcut first-keystroke="shift control G" />
</action>
<action id="Inline">
<keyboard-shortcut first-keystroke="shift control O" />
</action>
<action id="IntroduceField">
<keyboard-shortcut first-keystroke="shift control D" />
</action>
<action id="Mvc.RunTarget">
<keyboard-shortcut first-keystroke="shift control P" />
</action>
<action id="StructuralSearchPlugin.StructuralReplaceAction" />
<action id="Synchronize">
<keyboard-shortcut first-keystroke="shift control Y" />
</action>
</keymap>
IntelliJ, lambda'nın açılış parantezini yeni bir satıra koymanın bir yolunu sağlamıyor gibi görünse de, aksi takdirde oldukça makul bir biçimlendirme yolu, bu yüzden bunu kabul edildi olarak işaretleyeceğim.
.filter(x -> x.contains("(M)"))
mısın Çok daha basit ... Aslında birden fazla ifadeye ihtiyaç duyduğunuz yerlerden bahsediyorsanız, buna ihtiyaç duyan bir örnek vermek daha iyi olacaktır.