2016-06-28 2 views
-1

나는 사람의 arraylist을 가지고 ArrayList<Person>. 각 사람은 이름과 나이를 무작위로 얻습니다. 그 ArrayListPerson 나는 람다 표현을 사용하여 18 세를 걸러 냈습니다.arraylist의 각 사람에 대한 스레드를 만드는 방법

제 질문은 Arraylist의 각 필터링 된 Person에 대해 Thread을 어떻게 만들 수 있습니까?

내 코드 : Person implements Runnable의 아이디어는 아주 이상한 소리 것을 나는 대형 제임스에 동의

public class Person implements Runnable 
{ 
    private String name; 
    private int age; 

    public Person(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public void run() { 
     // to fill up later 
    } 
} 

public class Main { 
     private static int nameCount = 1; 
     public static List<Person> list; 

     public static void main(String[] args) { 
      list = new ArrayList<Person>(); 
      for (int i = 0; i < 5; i++) { 
       list.add(new Person(getPersonName(), getPersonAge()); 
      } 
      list.removeIf(p -> p.getage().equals(18)); 
      for (Person person : list) { 
       System.out.println(persion); 
      } 
     } 

     public static String getPersonName() { 
      String nameto = "PERSON" + String.valueOf(nameCount); 
      nameCount++; 
      return nameto; 
     } 

     public static int getPersonAge() { 
      Random ran = new Random(); 
      int ageperson = ran.nextInt(25) + 1; 
      return ageperson; 
     } 
     //how to make an instance of Thread after filtering the person 
    } 
+6

: filter

그래서 결과는 다음 될 것

그러나 당신은 StreamAPI 및 방법 foreach를 사용할 수있는 목록의 각 항목에 대한 몇 가지 논리를 구현하는 방법이, 나 또한 방법을 사용하는 것이 좋습니다 그림의 형태로 된 코드는 일반적으로 그렇게 잘 받아 들여지지 않습니다. – Timo

+1

에 오신 것을 환영합니다 :) @TimoSta 제안에 뒤이어, 스크린 샷을 게시하는 대신 질문을 편집하고 코드를 복사/붙여 넣기하십시오. –

+0

'사람이 Runnable을 구현한다 '는 아이디어는 매우 이상하게 들립니다. 어떤 사람을 "도망"한다는 것은 무엇을 의미합니까? 배경 스레드에있는 사람에게 할 일이 여러 개있을 때 그 의미는 무엇입니까? –

답변

0

.

list.stream() 
    .filter(person -> person.getage() == 18) 
    .forEach(person -> new Thread(person).start()); 
+0

이것을 루프로 묶어야합니까? 각 사람을위한 스레드를 만들 수 있습니까? – ilovejavaAJ

+0

아니요, 필요 없습니다. 메소드'forEach()'는 스트림의 각 요소에 대한 로직을 호출합니다. 그래서 각 요소에 대해 스레드가 생성되고'start()'메소드가 호출됩니다. –

관련 문제