我想通过lambda缩进实现以下内容:
多行语句:
String[] ppl = new String[] { "Karen (F)", "Kevin (M)", "Lee (M)", "Joan (F)", "Des (M)", "Rick (M)" };
List strings = Arrays.stream(ppl)
.filter(
(x) ->
{
return x.contains("(M)");
}
).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
单行语句:
List 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 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 strings = Arrays.stream(ppl).map((x) -> x.toUpperCase())
.filter((x) -> x.contains("(M)")).collect(Collectors.toList());
strings.stream().forEach(System.out::println);
而且我发现这真的很混乱,因为该collect调用直接位于的下面,return而且它们之间根本没有空间。如果我可以在缩进的新行中开始lambda,并且希望该.filter(调用位于该.collect(调用的正上方,则更希望这样做。但是,唯一可以使用标准Java-8
Eclipse Formatter定制的东西是lambda主体开始处的花()括号,但事先没有括号,也没有缩进。
在单线呼叫的情况下,它仅使用基本的换行符,并使它成为一连串的混乱局面。我认为不需要解释为什么以后很难解密。
有什么办法可以以某种方式进一步自定义格式并在Eclipse中实现第一种格式类型?(或者,可选地,在另一个IntelliJ IDEA之类的IDE中。)
编辑:我能得到的最接近的是IntelliJ IDEA 13社区版(阅读:免费版: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 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 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);
}
我个人发现,虽然它更有意义,但第二个版本将其推得太远,因此我更喜欢第一个。
负责第一次设置的设置如下:
我试图确保一切都合理,但是我可能把事情弄糟了,因此可能需要稍作调整。
如果您像我一样是匈牙利人,并且使用的是匈牙利语布局,则此按键映射可能对您有用,因此您最终将无法使用AltGR + F,AltGR + G,AltGR + B
,AltGR + N和AltGR + M(分别对应于Ctrl + Alt)。
尽管IntelliJ似乎没有提供一种将lambda的左大括号放在新行中的方法,否则它是一种相当合理的格式化方式,因此我将其标记为已接受。