Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何找到前三个字符串,按排序顺序以小写字母“a”开头_Java_Foreach_Java Stream - Fatal编程技术网

Java 如何找到前三个字符串,按排序顺序以小写字母“a”开头

Java 如何找到前三个字符串,按排序顺序以小写字母“a”开头,java,foreach,java-stream,Java,Foreach,Java Stream,Java 8流API/ 如何查找前三个字符串,它们按排序顺序以小写字母a开头。如何使用System.out.println()打印结果 这似乎有效-需要告诉列表您正在处理的对象类型 List<String> myList = Arrays.asList("A1", "a2", "b1", "c2", "A2", "a3", "c2", "A3", "c2", "a1", "a4", "a6"); myList.

Java 8流API/

如何查找前三个字符串,它们按排序顺序以小写字母
a
开头。如何使用
System.out.println()
打印结果


这似乎有效-需要告诉列表您正在处理的对象类型

List<String> myList = Arrays.asList("A1", "a2", "b1", "c2", "A2", 
                                   "a3", "c2", "A3", "c2", "a1", "a4", "a6");

myList.stream().filter(s -> s.startsWith("a")).sorted().limit(3)
forEach(s ->System.out.println("Filtered value: " + s));
List myList=Arrays.asList(“A1”、“a2”、“b1”、“c2”、“a2”,
“a3”、“c2”、“a3”、“c2”、“a1”、“a4”、“a6”);
myList.stream().filter(s->s.startsWith(“a”)).sorted().limit(3)
forEach(s->System.out.println(“过滤值:+s));
另外,由于您只需要小写
a
,因此无需转换为小写。

您可以在排序后向流中添加
.limit(3)
。 列表需要键入
list
才能使用字符串方法,并且不需要
toLowerCase
,除非您希望将结果转换为小写

List myList=List.of(
“A1”、“a2”、“b1”、“c2”、“a2”、“a3”、“c2”、“a3”、“a3”、“c2”、“A1”、“a4”、“a6”);
myList.stream().filter(s->s.charAt(0)='a')。sorted().limit(3)
.forEach(s->System.out.println(“过滤值:+s));
更新:对于每个字符串的索引1的数字排序:

Comparator Comparator=Comparator.comparating(
s->Integer.parseInt(s.substring(1));
myList.stream().filter(s->s.charAt(0)='a')。排序(比较器)。限制(3)
.forEach(s->System.out.println(“过滤值:+s));

请查找以下相同的代码:

List<String> myList = Arrays.asList("A1", "a2", "b1", "c2", "A2", "a3", "c2", "A3", "c2", "a1", "a4", "a6");
            myList.stream().filter(x-> x.startsWith("a")).sorted().limit(3).forEach(System.out :: println);
List myList=Arrays.asList(“A1”、“a2”、“b1”、“c2”、“a2”、“a3”、“c2”、“c2”、“A1”、“a4”、“a6”);
myList.stream().filter(x->x.startsWith(“a”)).sorted().limit(3).forEach(System.out::println);

不使用
,您可以按如下方式执行:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Main {
    public static void main(String[] args) {
        List<String> myList = Arrays.asList("A1", "a2", "b1", "a11", "c2", "A2", "a3", "c2", "A3", "c2", "a1", "a4",
                "a6");
        List<String> tempList = new ArrayList<String>();

        for (String s : myList)
            if (s.startsWith("a"))
                tempList.add(s);

        Comparator<String> strWithNumComparator = new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                int n1 = Integer.parseInt(s1.replaceAll("[^\\.0123456789]", ""));
                int n2 = Integer.parseInt(s2.replaceAll("[^\\.0123456789]", ""));
                return n1 == n2 ? 0 : (n1 < n2 ? -1 : 1);
            }
        };
        Collections.sort(tempList, strWithNumComparator);

        List<String> targetList = new ArrayList<String>();
        for (int i = 0; i < 3; i++)
            targetList.add(tempList.get(i));

        System.out.println(targetList);
    }
}
解决方案中的步骤:

[a1, a2, a3]
  • 创建一个临时列表,其中包含以“a”开头的所有元素
  • 创建一个
    比较器
    ,它根据字符串的整数部分对字符串进行排序;而不是从开始到结束计数的字符/数字的ASCII值。请注意我是如何从字符串中提取数字部分的
  • 使用此比较器对临时列表进行排序
  • 创建目标列表并将排序列表中的前三个元素复制到该列表中

  • 如果有任何疑问,请随时发表评论。

    t谢谢您的回答。但是:怎么能只打印以小写字母a开头的前三个字符串呢?@Spring完成了这项工作,如果是这样,请向上投票并接受回答。它排序并给出前三个字符串。。谢谢-恐怖袋熊------------------过滤值:a1过滤值:a2过滤值:A3它刚刚错过了forEach之前的要点。谢谢–可怕的袋熊myList.stream().filter(s->s.startsWith(“a”)).sorted().limit(3).forEach(s->System.out.println(“过滤值:+s”);如果Arrays.asList是这样的:Arrays.asList(“A1”、“a2”、“b1”、“a11”、“a10”、“c2”、“a2”、“a3”、“a3”、“c2”、“A1”、“a4”、“a6”);然后输出如下:a1a10a11,这是错误的。谢谢你的回答。如果Arrays.asList是这样的:Arrays.asList(“A1”、“a2”、“b1”、“a11”、“a10”、“c2”、“a2”、“a3”、“a3”、“c2”、“A1”、“a4”、“a6”);然后输出如下:a1 a10 a11,这是错误的,在这种情况下,您希望的顺序是什么?a1,a2,a3而不是a1,a10,a11,因为这是错误的,所以您不希望字母数字顺序,您希望按照字符串索引1中的数值进行排序。是吗?Jes,按字符串索引1中的数值排序。您好,欢迎来到stackoverflow,谢谢您的回答。你能不能简单地解释一下你解决了什么问题以及你是如何解决的,而不是仅仅发布一段代码?这将有助于将来发现这个问题的人更好地理解这个问题以及如何处理它。在这里,我使用流过滤器过滤以“a”开头的元素,并使用流排序方法按自然顺序对元素进行排序。sorted()方法将comparator作为输入,但是,如果我们需要按照自然顺序(比如降序)以外的顺序进行排序,我们需要将comparator作为输入((x,y)->y.compareTo(x)),那么我使用了steam limit()方法,通过将3作为输入来获取前3个元素。然后我使用了stream forEach()方法,该方法用于执行终端操作,因为stream是延迟执行的,并打印元素。我希望上面的解释是有帮助的。如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。公认的答案有助于未来的访问者自信地使用解决方案。检查以了解如何做。
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    class Main {
        public static void main(String[] args) {
            List<String> myList = Arrays.asList("A1", "a2", "b1", "a11", "c2", "A2", "a3", "c2", "A3", "c2", "a1", "a4",
                    "a6");
            List<String> tempList = new ArrayList<String>();
    
            for (String s : myList)
                if (s.startsWith("a"))
                    tempList.add(s);
    
            Comparator<String> strWithNumComparator = new Comparator<String>() {
                @Override
                public int compare(String s1, String s2) {
                    int n1 = Integer.parseInt(s1.replaceAll("[^\\.0123456789]", ""));
                    int n2 = Integer.parseInt(s2.replaceAll("[^\\.0123456789]", ""));
                    return n1 == n2 ? 0 : (n1 < n2 ? -1 : 1);
                }
            };
            Collections.sort(tempList, strWithNumComparator);
    
            List<String> targetList = new ArrayList<String>();
            for (int i = 0; i < 3; i++)
                targetList.add(tempList.get(i));
    
            System.out.println(targetList);
        }
    }
    
    [a1, a2, a3]