2017-06-06 83 views
0

是否有一種聰明的方法來將一個Iterable的所有對象的屬性設置爲一個指定的值?設置一個可重用的所有對象的屬性

我有一個類SystemUser看起來像:

class SystemUser{ 
    private String name; 
    private String password; 
    ... 
} 

,併產生像一個迭代對象另一個類:

public Iterable<SystemUser> getUsers(){ 
    ... 
    return users; 
} 

我可以設置的所有對象的屬性「密碼」迭代爲null而沒有迭代?

謝謝!

+0

可迭代旨在被重複。你怎麼能遍歷一個迭代器的所有元素而無需迭代? –

+0

首先,您不應該將任何密碼放入'String'中。您應該將密碼讀入'char []'中,立即對其進行散列,然後覆蓋'char []'以清除原始密碼的任何痕跡。 –

+0

也許op想要一個內聯的方式來迭代和設置它 –

回答

3

除非您在將它們合併到Iterable之前已經設置了密碼,憑藉initial value的引用,其密碼(和名稱)已被設置爲null

如果您已在其合併之前爲其中的一個或任意數量的密碼設置了密碼,則必須通過標準的for語句或通過使用forEach和流進行迭代。

0

任何方式來應​​用任何功能的項目你需要遍歷所有元素和改變值。有很多第三方庫可用於此目的,如 GUAVA或如上面foreach建議。

的Util使用通用

public static <T> void apply(Iterable<T> iterable, Function<T, Void> function) { 
    for (T input : iterable) 
     function.apply(input); 
} 

使用番石榴

final List<String> list = Arrays.asList("race", "box"); 
final List<String> transformed = 
    Lists.newArrayList(Iterables.transform(list, new Function<String, String>() { 

     @Override 
     public String apply(final String input) { 
      return new StringBuilder().append(input).append("car").toString(); 
     } 
    })); 

使用的for-each

// Suppose that I have already init the list of car 
List<Car> cars = //... 
List<String> names = new ArrayList<String>(); 

// LAMBDA EXPRESSION 
cars.forEach((car) -> names.add(car.getName())); 
相關問題