람다 들여 쓰기로 달성하고 싶은 것은 다음과 같습니다.
여러 줄 문 :
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);
한 줄 문 :
List<String> strings = Arrays.stream(ppl)
.map((x) -> x.toUpperCase())
.filter((x) -> x.contains("(M)"))
.collect(Collectors.toList());
현재 Eclipse는 다음과 같이 자동 형식화됩니다.
여러 줄 문 :
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);
한 줄 문 :
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);
collect
전화가 바로 아래에 return
있고 그 사이에 공간이 전혀 없기 때문에 이것은 정말 지저분 합니다. 들여 쓰기 된 새 줄에서 람다를 시작할 수 있고 .filter(
호출이 호출 바로 위에 있도록하려면 선호합니다 .collect(
. 그러나 표준 Java-8 Eclipse Formatter로 사용자 정의 할 수있는 유일한 것은 람다 본문의 시작 부분에있는 중괄호이지만 ()
사전에 대괄호 나 들여 쓰기를 위한 것은 없습니다 .
그리고 단일 회선 호출의 경우 기본 줄 바꿈을 사용하여 체인이 엉망이됩니다. 나중에 이것이 왜 해독이 어려운지 설명 할 필요가 없다고 생각합니다.
어떻게 든 형식을 사용자 정의하고 Eclipse에서 첫 번째 형식화 유형을 달성하는 방법이 있습니까? (또는 선택적으로 IntelliJ IDEA와 같은 다른 IDE에서.)
편집 : 내가 얻을 수있는 가장 가까운 것은 IntelliJ IDEA 13 Community Edition (읽기 : 무료 버전 : P)으로 다음과 같았습니다 (이 경우 8입니다).
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);
또한 다음과 같이 연결된 메서드 호출을 "정렬"할 수 있습니다.
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);
}
나는 개인적으로 그것이 더 의미가 있지만 두 번째 버전이 너무 멀리 밀려서 첫 번째 버전을 선호한다는 것을 개인적으로 발견했습니다.
첫 번째 설정을 담당하는 설정은 다음과 같습니다.
<?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>
모든 것이 합리적인지 확인하려고 노력했지만 뭔가 엉망이되었을 수 있으므로 약간의 조정이 필요할 수 있습니다.
나처럼 헝가리어이고 헝가리어 레이아웃을 사용하는 경우이 키맵이 유용 할 수 있으므로 AltGR + F, AltGR + G, AltGR + B를 사용할 수 없게됩니다. , AltGR + N 및 AltGR + M (Ctrl + Alt에 해당).
<?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는 람다의 여는 중괄호를 새 줄에 넣는 방법을 제공하지 않는 것 같지만 그렇지 않으면 상당히 합리적인 형식 지정 방법이므로 수락 된 것으로 표시합니다.
.filter(x -> x.contains("(M)"))
? 훨씬 더 간단합니다 ... 실제로 여러 문장이 필요한 곳에 대해 이야기 하고 있다면 , 필요한 예를 제공하는 것이 좋습니다.