标签: java-stream

Java 8 Streams修改集合值

使用流API; 一旦相关数据被过滤,我想编辑正在收集的数据.这是迄今为止的代码:

  String wordUp = word.substring(0,1).toUpperCase() + word.substring(1);
  String wordDown = word.toLowerCase();

  ArrayList<String> text = Files.lines(path)
        .parallel() // Perform filtering in parallel
        .filter(s -> s.contains(wordUp) || s.contains(wordDown) &&  Arrays.asList(s.split(" ")).contains(word))
        .sequential()
        .collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)

编辑下面的代码很糟糕,我试图避免它.(它也没有完全奏效.它是在凌晨4点完成的,请原谅.)

    for (int i = 0; i < text.size(); i++) {
        String set = "";
        List temp = Arrays.asList(text.get(i).split(" "));
        int wordPos = temp.indexOf(word);

        List<String> com1 = (wordPos >= limit) ? temp.subList(wordPos - limit, wordPos) : new ArrayList<String>();
        List<String> com2 = (wordPos + limit < text.get(i).length() -1) …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream collectors

0
推荐指数
1
解决办法
7377
查看次数

为什么我可以在没有stream() - 方法的类的对象上调用stream()方法?

我是大学新手Java程序员.我今天发现了一些关于Java语法如何工作的概念.

public class testClass {

ArrayList <String> persons = new ArrayList <String> ();

public void run(){
    Stream <String> personstream = persons.stream();
}}
Run Code Online (Sandbox Code Playgroud)

stream()在ArrayList类中找不到该方法,但它可能看起来好像在那里.当我将鼠标移到stream()Eclipse中的-method上时,它表示它是Collections的一部分,但我stream()在其在线文档中找不到任何方法.

stream()如果它不是我从中调用它的类的一部分,为什么调用该方法呢?

java collections syntax java-stream

0
推荐指数
1
解决办法
614
查看次数

Java流排序不起作用

我有一个

HashMap<String,Integer> map 
Run Code Online (Sandbox Code Playgroud)

我希望按值按降序排序:

HashMap<String,Integer> topSorted = new HashMap<>();

//sort map in descending order
Stream<HashMap.Entry<String,Integer>> st = map.entrySet().stream();
st.sorted(Comparator.comparing((HashMap.Entry<String,Integer> e) -> e.getValue()).reversed())
        .forEach(e -> topSorted.put(e.getKey(),e.getValue()));
Run Code Online (Sandbox Code Playgroud)

但topsorted仍然与地图相同,根本没有进行排序

有人可以解释我做错了什么

java sorting java-8 java-stream

0
推荐指数
1
解决办法
1406
查看次数

java流performace用于查找列表中的最大元素

我编写了一个简单的程序来与流的性能进行比较,以查找整数的最大形式列表。令人惊讶的是,我发现“流方式”的性能是“通常方式”的1/10。难道我做错了什么?是否有条件限制哪种Stream方法无效?有人能对此行为做出一个很好的解释吗?

“流方式”花费了80毫秒“流方式”花费了15毫秒请在下面找到代码

public class Performance {

public static void main(String[] args) {

    ArrayList<Integer> a = new ArrayList<Integer>();
    Random randomGenerator = new Random();
    for (int i=0;i<40000;i++){
        a.add(randomGenerator.nextInt(40000));
    }
    long start_s = System.currentTimeMillis( );

            Optional<Integer> m1 = a.stream().max(Integer::compare);

    long diff_s = System.currentTimeMillis( ) - start_s;
    System.out.println(diff_s);


    int e = a.size();
    Integer m = Integer.MIN_VALUE;

    long start = System.currentTimeMillis( );
    for(int i=0; i < e; i++) 
      if(a.get(i) > m) m = a.get(i);

    long diff = System.currentTimeMillis( ) - start;
    System.out.println(diff);


}
Run Code Online (Sandbox Code Playgroud)

}

java performance java-8 java-stream

0
推荐指数
1
解决办法
548
查看次数

Java 8 - 初始化列表(列表)

我有一个关于Java 8和列表的问题.是否可以比下面的代码更容易初始化List?

final List<List<ScheduleIntervalContainer>> weekScheduler = new ArrayList<>();

weekScheduler.add(0, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(1, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(2, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(3, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(4, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(5, new ArrayList<ScheduleIntervalContainer>());
weekScheduler.add(6, new ArrayList<ScheduleIntervalContainer>());
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

0
推荐指数
2
解决办法
226
查看次数

Java 8流forEach

我试图迭代对象的ArrayList并打印出列表中每个对象的'name'属性.但是,即使我在Person类中有名称的getter方法,我也无法访问该对象的属性.这是一些代码:

 ArrayList persons = new ArrayList<>();
 persons.add(new Person("Name","Age"));
 persons.add(new Person("Name1","Age1"));
 persons.add(new Person("Name2","Age2"));

persons
 .stream()
 .forEach(e -> System.out.println(e.getName()));   //giving an error

  forEach(e -> System.out.println(e));  //no error
Run Code Online (Sandbox Code Playgroud)

它不允许我这样做.我只能在打印命令中使用'e',它打印对象的参考号.

任何帮助表示赞赏:)

java java-8 java-stream

0
推荐指数
1
解决办法
3239
查看次数

Java Stream.sorted()给出了错误的结果

我有列表{"100","5","1","300","7"},当我stream().sorted()用于此列表时,它给了我以下结果{"1","100","300","5","7"}.看起来它只按第一个数字排序.怎么了?

ArrayList<String> list = new ArrayList<>(Arrays.asList(
            "100","5","1","300","7"
));

list.stream().sorted().forEach(e -> System.out.println(e));
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

0
推荐指数
1
解决办法
331
查看次数

解释性能差异

这是完整来源和数据的直接链接

这些测试的时序差别很大,但是经历了相同的实现.我想了解为什么时间不同.

private static final int ITERATIONS = 100;
private static final DataFactory RANDOM_DF = DataFactoryImpl.defaultInstance();


@Test // 6s
public void testGetMaxLength() throws Exception {
    for ( int i = 1; i < ITERATIONS; i++ ) {
        testGetMaxLength( i );
    }
}

private void testGetMaxLength( final int length ) {
    for ( int i = 0; i < ITERATIONS; i++ ) {
        String word = RANDOM_DF.word().getMaxLength( length );
        assertThat( word, not( isEmptyOrNullString() ) );
        assertThat( word.length(), allOf( …
Run Code Online (Sandbox Code Playgroud)

java performance java-8 java-stream

0
推荐指数
1
解决办法
161
查看次数

流分组:子列表到唯一的父列表

我正在寻找一种简洁有效的方法来从使用Java 8流的子项列表中获取唯一父项列表.

对于示例,我有两个简单的类:

public class Child{
  private Parent parent;
  public Child(Parent parent){
    this.parent = parent;
  }
  public Parent getParent(){
    return this.parent;
  }
}

public class Parent{
  private List<Child> children;
  public Parent(){
    this.children = new ArrayList<Child>();
  }
  public void addChild(Child child){
    this.children.add(child);
  }
}
Run Code Online (Sandbox Code Playgroud)

首先,我从某种方法获得Child对象的列表.
孩子可能属于多个父母,可能有父母碰撞.

List<Child> children = getChildren();
Run Code Online (Sandbox Code Playgroud)

然后 :

List<Parent> uniqueParents = children
  .stream()
  .collect(Collectors.groupingBy(Child::getParent))
  .keySet()
  .stream()
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

所以它有效,但我想避免双流并收集.

这可能直接在一个流中吗?

java collections java-stream

0
推荐指数
1
解决办法
990
查看次数

stream.forEach中的多行代码

我有以下代码来读取文件的行:

String fileName = "dataset/ANC-all-count.txt";
Integer i=0;
//read file into stream, try-with-resources
try (Stream<String> stream = Files.lines(Paths.get(fileName), StandardCharsets.ISO_8859_1)) {

    stream.forEach(System.out::println);
    i++;

} catch (IOException e) {
    e.printStackTrace();
}
System.out.println("count is : "+i);
Run Code Online (Sandbox Code Playgroud)

但问题是我需要放入i++以下行:

stream.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

所以我想要这样的东西:

stream.forEach(System.out::println; i++);
Run Code Online (Sandbox Code Playgroud)

但它不能以这种方式工作,所以任何人都可以帮助我如何使它工作?

java java-8 java-stream

0
推荐指数
3
解决办法
7331
查看次数