java改缩进格式,Java 8:使用换行符和缩进格式格式化lambda

我想通过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的左大括号放在新行中的方法,否则它是一种相当合理的格式化方式,因此我将其标记为已接受。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值