Java 8 Streams查找元素并将其添加到新List的开头
发布时间:2020-12-15 08:26:42 所属栏目:Java 来源:网络整理
导读:我想知道是否可以使用 Java Streams一行来解决这个问题:我需要在字符串列表中找到一个字符串并创建另一个列表,其中搜索字符串(如果找到)将是新列表中的第一个字符串然后是其余的String值 对于Eg: ListString oldList = Arrays.asList("Avacado","Apple","O
我想知道是否可以使用
Java Streams一行来解决这个问题:我需要在字符串列表中找到一个字符串并创建另一个列表,其中搜索字符串(如果找到)将是新列表中的第一个字符串然后是其余的String值
对于Eg: List<String> oldList = Arrays.asList("Avacado","Apple","Orange","Chocolate"); 所以现在如果使用过滤器“巧克力”进行搜索,它应该返回一个新列表,其中包含“巧克力”,“Avacado”的元素, List<String> newList = oldList.stream().filter(i -> i.equals("Chocolate")).collect(Collectors.toList()) ??? 解决方法
您正在寻求使用Stream的解决方案.这是一:
List<String> sorted = oldList.stream() .sorted(Comparator.comparing("Chocolate"::equals).reversed()) .collect(Collectors.toList()); System.out.println(sorted); 它给出了: [Chocolate,Avacado,Apple,Orange] 因此,只有“巧克力”在第一个指数被移动. 但实际上你不需要一个Stream.列表本身就足够了: oldList.sort(Comparator.comparing("Chocolate"::equals).reversed()); System.out.println(oldList); 结果是 [Chocolate,Orange] … 相同. 编辑: 此方法将每个字符串映射到一个布尔值,该值指出字符串是否等于“巧克力”.在相等的情况下,如果另一个字符串不等于“巧克力”,则Boolean.compare(x,y)将为x返回1,为y返回-1.如果x和y等于“Chocolate”,则结果为0.由于我们想将“巧克力”移到第一个指数,它的指数必须降低.因此需要一个尊重的比较器(1 => -1和-1 => 1). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |